以下类的声明之间有什么区别?
class A
{
public:
A()
{
std::cout << "A()\n";
}
~A()
{
std::cout << "~A()\n";
}
};
int main(int argc, char *argv[])
{
A a; // <-- this call the constructor and destructor
A b(); // <-- this is not!! what is a b()?
return 0;
}
什么是b()
?
答案 0 :(得分:3)
这是一个most vexing parse问题; C ++规则的副作用,即任何可以解析为
声明必须解释为一个。所以A b();
是一个函数声明,b
是一个函数不带任何东西并返回A
。
从C ++ 11开始,您可以使用大括号(list initialization)代替括号;因为无法使用大括号为参数列表声明函数,所以&#34;歧义&#34;走了。
A b{}; // calls A's default constructor