A a; 和有什么区别?和一个 a();?
What's the difference between A a; and A a();?
下面类的声明有什么区别?
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()
?
这是一个 most vexing parse 问题; C++ 规则的副作用是任何可以被解析为
声明必须被解释为一个。所以 A b();
是一个函数声明,b
是一个什么都不做的函数,returns A
.
从 C++11 开始,您可以使用大括号 (list initialization) 代替圆括号;因为不能使用参数列表的大括号声明函数,所以 "ambiguity" 消失了。
A b{}; // calls A's default constructor
下面类的声明有什么区别?
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()
?
这是一个 most vexing parse 问题; C++ 规则的副作用是任何可以被解析为
声明必须被解释为一个。所以 A b();
是一个函数声明,b
是一个什么都不做的函数,returns A
.
从 C++11 开始,您可以使用大括号 (list initialization) 代替圆括号;因为不能使用参数列表的大括号声明函数,所以 "ambiguity" 消失了。
A b{}; // calls A's default constructor