2016-11-14 347 views
-1

下面的类声明有什么区别?A a有什么区别?和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()

回答

3

这是一个most vexing parse问题; C++规则的一个副作用是任何可以被解析为 声明的规则都必须被解释为一个。所以A b();是一个函数声明,b是一个无用函数并且返回A

从C++ 11开始,可以使用大括号(list initialization)代替圆括号;因为函数不能用参数列表的大括号来声明,所以“歧义”消失。

A b{}; // calls A's default constructor 
+2

请不要回答明显的错误 – NathanOliver

相关问题