2012-02-24 9 views
6
class A{ 
    private: 
     string a; 
    public: 
     A():a("hello world"){}; 
     A(const string & arg):a(arg){}; 
     void put()const{cout<<a;}; 
}; 

A aaa(); 
A bbb; 

A aaa();A bbb;の違いは何ですか?aaaは機能ですか?A aaaの差異; A aaa();

+0

3番目のオプションがあります。コンストラクタを明示的に呼び出します。 A aaa = A(); –

+0

重複している可能性があります。なぜなら、引数のないコンストラクタを呼び出すために空の括弧を使用するのはなぜですか?](http://stackoverflow.com/questions/180172/why-is-it-an-error-to -level-of-no-constructor-with-no) –

答えて

11

はい、最初のものは関数宣言として解釈されます。それはMost Vexing Parseと呼ばれています。

+1

'Aaa();'は、 "最も厄介な解析"の例ではありません。最も厄介な構文解析は、オブジェクトをデリケートして、その値のすべてのコンストラクタパラメータに一時的に値の初期化子を渡そうとするときに参照されます。例えば'B(D());' –

関連する問題