Ich habe folgendes imbecile Programm:C++ Warum funktionieren 3 dieser Konstruktoraufrufe, aber einer nicht?
#include <iostream>
using namespace std;
class Baz {
public:
Baz() {cout << "Baz ctor " << endl;}
Baz(int i) : Baz() {}
~Baz() {cout << "Baz dtor " << endl;}
};
int main()
{
cout << "w" << endl;
Baz w;
cout << "x" << endl;
Baz x();
cout << "y" << endl;
Baz y(1);
cout << "z" << endl;
Baz z = Baz();
return 0;
}
Dies erzeugt die folgende Ausgabe:
w
Baz ctor
x
y
Baz ctor
z
Baz ctor
Baz dtor
Baz dtor
Baz dtor
Meine Frage ist also: Warum alle nicht diese Anrufe den Konstruktor aufrufen?
Ich habe recherchiert, aber ich habe keine Erklärung gefunden, warum der 2. Aufruf nicht den Konstruktor aufruft. Ich würde erwarten, Baz x()
zu Baz x = Baz()
gleichwertig zu sein, wie Baz y(1)
Baz y = Baz(1)
entsprechen würde, muss es etwas sein, das ich vermisse.
Weil es Funktion Deklaration statt Variable ist. Verwenden Sie 'Baz x {};' statt – Slava
Oder einfach 'Bar x'; – SergeyA