C++ C++;-如果构造函数是私有的,这将做什么?
在下面的代码中,编译器为什么不抱怨mClass2C++ C++;-如果构造函数是私有的,这将做什么?,c++,constructor,private,most-vexing-parse,C++,Constructor,Private,Most Vexing Parse,在下面的代码中,编译器为什么不抱怨mClass2 class CMyClass{ private: CMyClass(){} }; void TestMethod(){ CMyClass mClass1; //Fails. CMyClass mClass2(); //Works. } 因为您刚刚声明了一个零参数的函数mClass2,该函数返回CMyClass。这是一个有效的选项,因为可能存在该函数可以访问的静态CMyClass实例。请注意,CMyClass仍然有一
class CMyClass{
private:
CMyClass(){}
};
void TestMethod(){
CMyClass mClass1; //Fails.
CMyClass mClass2(); //Works.
}
因为您刚刚声明了一个零参数的函数
mClass2
,该函数返回CMyClass
。这是一个有效的选项,因为可能存在该函数可以访问的静态CMyClass
实例。请注意,CMyClass
仍然有一个公共副本构造函数
(为了说服你自己,把这个模块编译成汇编程序,并观察注释掉行
CMyClass mClass2();
会产生相同的输出。)因为它声明了一个函数,而不是像你想的那样调用构造函数
这在C++中被称为<强> < /强>。
CMyClass mClass2();
声明一个函数
mClass2()
,该函数不带参数并返回CMyClass
第二个是函数声明。人们应该在C++0x/C++11中使用{}括号进行统一语法初始化,从而消除此问题
C类{}
related也称为:Most-Vexing-Parse(请参阅),也是一个有效的移动构造函数。Most-Vexing-Parse-不能说我以前听说过,我会看一看,谢谢。:)