在下面的代码中,为什么编译器不会抱怨mClass2?
class CMyClass{
private:
CMyClass(){}
};
void TestMethod(){
CMyClass mClass1; //Fails.
CMyClass mClass2(); //Works.
}
答案 0 :(得分:16)
因为您刚刚声明了一个零参数的函数mClass2
,它返回CMyClass
。这是一个有效的选项,因为可能有一个static CMyClass
实例,该函数可以访问该实例。请注意,CMyClass
仍然具有公共副本构造函数。
(为了说服自己,将此模块编译为汇编程序并观察注释掉行CMyClass mClass2();
会产生相同的输出。)
答案 1 :(得分:10)
因为它声明了一个函数而没有像你想象的那样调用构造函数。
这在c ++中称为 Most Vexing Parse 。
CMyClass mClass2();
声明一个函数mClass2()
,它不带参数并返回CMyClass
答案 2 :(得分:1)
第二个是函数声明。
答案 3 :(得分:0)
人们应该使用{}括号转到C ++ 0x / C ++ 11中的统一语法初始化,这样可以解决这个问题。
C类{};