在下面的代码中,为什么编译器不会抱怨mClass2?C++ - 如果构造函数是私有的,这是干什么的?
class CMyClass{
private:
CMyClass(){}
};
void TestMethod(){
CMyClass mClass1; //Fails.
CMyClass mClass2(); //Works.
}
在下面的代码中,为什么编译器不会抱怨mClass2?C++ - 如果构造函数是私有的,这是干什么的?
class CMyClass{
private:
CMyClass(){}
};
void TestMethod(){
CMyClass mClass1; //Fails.
CMyClass mClass2(); //Works.
}
因为你刚刚声明的函数零点的mClass2
参数,返回一个CMyClass
。这是一个有效的选项,因为可能存在该功能有权访问的static CMyClass
实例。请注意,CMyClass
仍具有公共复制构造函数。
(要说服自己,编译这个模块组装和观察注释掉行CMyClass mClass2();
产生相同的输出。)
此外,一个有效的移动构造函数。 – Arafangion
非常感谢。 :) – R4D4
因为它声明一个函数,而不是调用构造函数作为你的想法。
这在C++中被称为Most Vexing Parse。
CMyClass mClass2();
声明的函数mClass2()
它没有任何参数和返回CMyClass
**最令人头疼的解析** - 不能说我以前听说过,我会看看,谢谢。 :) – R4D4
@ R4D4:添加链接,供您查阅:) –
第二个是一个函数声明。
人们应该改用C++ 0x/C++ 11中的统一语法初始化,而不是使用{}括号来消除此问题。
C类{};
相关http://stackoverflow.com/questions/4296090/some-problems-while-learning-stl/4296118#4296118 –
也称为:最棘手的解析(请参见http:// EN。 wikipedia.org/wiki/Most_vexing_parse) –