2017-10-20 1 views
-1

Wenn der Konstruktor mit einem Standardkonstruktorargument aufgerufen wird, wird kein Objekt erstellt.Kopieren und Basiskonstruktor initialisieren nicht C++

class cl{ 
private: 
public: 
    cl(){cout << "Default used" << endl;}; 
    cl(const cl & cl_object) {cout << "Copy used" << endl;}; 
    cl & operator=(const cl & cl_object){cout << "Assignment used" << endl; return *this;}; 
}; 

Wenn ich schreibe:

cl(cl()); 

keine Meldung angezeigt wird.

Fragen: 1) Warum wird kein Objekt konstruiert? 2) Warum wird der Kopierkonstruktor nicht verwendet?

+0

@NathanOliver Können Sie erklären, wie das ein Duplikat ist? – Nameless

+0

Wie die Antwort sagt, erklärt 'cl (cl());' eine Funktion. Da es sich um eine Funktion und keine Variable handelt, werden Sie keine Konstruktoraufrufe sehen, da Sie nichts konstruieren. – NathanOliver

+0

@NathanOliver Also, wenn ich es richtig verstanden habe mit cl(); Konstruiert nur ein Objekt, aber mit cl (cl()); erklärt eine Funktion. Aber wenn es eine Funktion deklariert sollte nicht der Compiler einen Fehler ausgeben, da ich den Rückgabetyp nicht angegeben habe? – Nameless

Antwort

1

drängendsten Parse

cl(cl()); 

als Funktionsdeklaration analysiert.

+0

Sollte der Compiler keinen Fehler ausgeben, da ich den Rückgabetyp nicht angegeben habe? – Nameless

+0

Mein Verständnis ist, dass es eine Funktion namens cl mit Argument des Typs Klasse cl ist. Aber es hat immer noch keinen Rückgabetyp. Wenn ich in meinem Compiler den Rückgabetyp nicht angeben, wird ein Fehler zurückgegeben. Was passiert hier? – Nameless

+0

Wird als 'c1 c1()' interpretiert, also die Funktion 'c1' (die die Klasse' c1' verbirgt) mit dem Rückgabetyp 'c1' (die Klasse). – Jarod42

Verwandte Themen