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