C++ - 如果构造函数是私有的,这会做啥?
Posted
技术标签:
【中文标题】C++ - 如果构造函数是私有的,这会做啥?【英文标题】:C++ - What is this doing if the constructor is private?C++ - 如果构造函数是私有的,这会做什么? 【发布时间】:2011-10-10 00:36:39 【问题描述】:在下面的代码中,为什么编译器没有报错mClass2?
class CMyClass
private:
CMyClass()
;
void TestMethod()
CMyClass mClass1; //Fails.
CMyClass mClass2(); //Works.
【问题讨论】:
相关***.com/questions/4296090/… 也称为:最令人烦恼的 Parse(见en.wikipedia.org/wiki/Most_vexing_parse) 【参考方案1】:因为你刚刚声明了一个零参数的函数mClass2
,它返回一个CMyClass
。这是一个有效的选项,因为可能存在该函数可以访问的 static CMyClass
实例。请注意,CMyClass
仍然有一个公共复制构造函数。
(为了说服自己,将此模块编译为汇编程序并观察注释掉 CMyClass mClass2();
行会产生相同的输出。)
【讨论】:
也是一个有效的移动构造函数。【参考方案2】:因为它是在声明一个函数,而不是像你想象的那样调用构造函数。
这在 c++ 中称为 Most Vexing Parse。
CMyClass mClass2();
声明一个函数mClass2()
,它不带参数并返回CMyClass
【讨论】:
最令人头疼的解析 - 不能说我以前听说过,我会看看,谢谢。 :)【参考方案3】:第二个是函数声明。
【讨论】:
【参考方案4】:人们应该改用 括号在 C++0x/C++11 中进行统一语法初始化,这样可以解决这个问题。
C类;
http://www2.research.att.com/~bs/C++0xFAQ.html#uniform-init
【讨论】:
以上是关于C++ - 如果构造函数是私有的,这会做啥?的主要内容,如果未能解决你的问题,请参考以下文章