2012-02-24 30 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();

+0

還有第三種選擇。顯式調用構造函數。 aaa = A(); – 2012-02-24 08:46:52

+0

[爲什麼使用一組空括號來調用沒有參數的構造函數是錯誤的](http://stackoverflow.com/questions/180172/why-is-it-an-error-to -use-an-empty-set-brackets-to-call-a-constructor-with-no) – 2012-02-26 09:12:53

回答

11

是的,第一個被解釋爲函數聲明。它被稱爲Most Vexing Parse

+1

'aaa();'不是「最令人頭疼的解析」的例子。最令人頭疼的解析是指當你嘗試去修改一個對象並將一個值初始化程序臨時傳遞給它的所有構造函數參數時。例如'B c(D());' – 2012-02-26 09:16:46

相關問題