2016-11-14 7 views
-1

Was ist der Unterschied zwischen den Deklarationen der folgenden Klassen?Was ist der Unterschied zwischen A a; und 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; 
} 

Was ist ein b()?

Antwort

3

Dies ist ein most vexing parse Problem; ein Nebeneffekt der C++ - Regel, dass alles, was als Deklaration geparst werden kann, als eins interpretiert werden muss. Also A b(); ist eine Funktionsdeklaration, b ist eine Funktion nimmt nichts und gibt A zurück.

Ab C++ 11 können Sie Klammern (list initialization) anstelle von Klammern verwenden; Da Funktionen nicht mithilfe von geschweiften Klammern für die Parameterliste deklariert werden können, verschwindet die "Ambiguität".

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

Bitte lassen Sie nicht offensichtliche Betrügereien beantworten – NathanOliver

Verwandte Themen