2012-02-24 12 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; 

Czym różni się funkcja A aaa(); i A bbb; od aaa?różnica między Aaa; i Aaa();

+0

Istnieje trzecia opcja. wywołanie konstruktora jawnie. Aaa = A(); –

+0

możliwy duplikat [Dlaczego używasz pustego zestawu nawiasów do wywoływania konstruktora bez argumentów?] (Http://stackoverflow.com/questions/180172/why-is-it-an-error-to -użyj-pustego-zestawu-nawiasów-do-wywołania-konstruktora-z-nie) –

Odpowiedz

11

Tak, pierwsza interpretowana jest jako deklaracja funkcji. Zostało to nazwane Most Vexing Parse.

+1

'Aaa();' nie jest przykładem "najbardziej irytującej analizy". Najbardziej irytujący parse odnosi się do próby usunięcia obiektu i przekazania wartości inicjatora wartości tymczasowej do wszystkich jego parametrów konstruktora. na przykład 'B c (D());' –