R4D*_*4D4 15 c++ constructor private most-vexing-parse
在下面的代码中,为什么编译器不抱怨mClass2?
class CMyClass{
private:
CMyClass(){}
};
void TestMethod(){
CMyClass mClass1; //Fails.
CMyClass mClass2(); //Works.
}
Run Code Online (Sandbox Code Playgroud)
Fre*_*Foo 16
因为你刚刚声明了一个mClass2返回零参数的函数CMyClass.这是一个有效的选项,因为可能有一个static CMyClass该函数可以访问的实例.请注意,CMyClass仍然有一个公共复制构造函数.
(为了说服自己,将此模块编译为汇编程序并观察注释掉该行CMyClass mClass2();会产生相同的输出.)
Alo*_*ave 10
因为它声明了一个函数而没有像你想象的那样调用构造函数.
CMyClass mClass2();
Run Code Online (Sandbox Code Playgroud)
声明一个mClass2()不带参数并返回的函数CMyClass