komischer konstruktoraufruf!
-
hab hier nen kleinen verständnisproblem beim aufruf von konstruktoren:
class X { private: int data; public: ~X() { cout << "Destruktor " << data << '\n'; } X(int d = -1) : data(d) { cout << "Allgemeiner Konstruktor " << data << '\n'; } X(const X &x) : data(x.data) { cout << "Kopierkonstruktor " << data << '\n'; } X& operator=(const X& x) { data = x.data; cout << "Zuweisungsoperator " << data << '\n'; return *this; } }; void g(X &a) { cout << '\n' << "Start g" << '\n'; X b = a; cout << "Ende g" << '\n'; } X a(0); int main() { cout << '\n' << "Start main" << '\n'; X a; a = 20; return 0; }
es geht um das a=20. das verhält sich ja genauso wie a=X(20). oder? irgendwie verstehe ich das nicht ganz. wie wird denn da erkannt was gemeint war?
-
steffanJ schrieb:
es geht um das a=20. das verhält sich ja genauso wie a=X(20).
Das ist der Aufruf des Zuweisungsoperators. Es gibt nur den einen, der ein X per Referenz annimmt, also wird aus 20 über den Konstruktor ein temporäres X-Objekt angelegt und dem Zuweisungsoperator übergeben.
-
X kann man implizit über den Konvertierungskonstruktor aus einem int erzeugen. Mach den Konstruktor mal
explicit
, dann geht das nicht mehr.
-
ah...ok. vielen dank! habs verstanden!
-
...