Aufruf des Default-Konstruktors ohne ()?
-
Hallo!
Ich habe in einer Klasse einen default- (sowie einen parametrierten Konstruktor - ist aber irrelevant, der funktioniert) implementiert.
Vec4::Vec4() { _coords[0] = 1; _coords[1] = 0; _coords[2] = 0; _coords[3] = 0; }Nun habe ich den intuitiv wie folgt aufgerufen:
Vec4 a();Funktioniert allerdings nicht, die 4 Membervariablen der Klasse bleiben uninitialisiert. Bei Aufruf ohne () funktionierts.
Warum ist das so, und was passiert statt des Konstruktoraufrufs bei ()?
Danke!
Grüße
Matthias
-
Das ist ein häufig gemachter Fehler.
Mit
vec a();deklarierst du in C++ eine Funktion mit Namen a, die ein vec-Objekt zurückgibt. Ohne die Klammern rufst du den Standardkonstruktor auf, wie du ja bereits selbst erkannt hast.
-
oder du schreibst
vec a = vec();Was aber keinen Sinn macht (und noch assignment oder copy-konstruktor voraussetzt)

-
Vielen Dank.
Stimmt, ist ja auch logisch. Brett vorm Kopf.