【问题标题】:What's the difference between A a; and A a();? [duplicate]A a 和有什么区别?和 A ();? [复制]
【发布时间】:2016-11-14 13:26:40
【问题描述】:

下面的类的声明有什么区别?

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()

【问题讨论】:

    标签: c++ constructor initialization most-vexing-parse


    【解决方案1】:

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

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

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

    【讨论】:

    • 请不要回答明显的欺骗
    猜你喜欢
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 2018-06-27
    相关资源
    最近更新 更多