Es gibt verschiedene Möglichkeiten, eine Variable in C++ zu initialisieren. int z(3)
ist dasselbe wie int z=3
. Ist
int z;
z(3);
dasselbe wie
int z;
z=3;
?
Es gibt verschiedene Möglichkeiten, eine Variable in C++ zu initialisieren. int z(3)
ist dasselbe wie int z=3
. Ist
int z;
z(3);
dasselbe wie
int z;
z=3;
?
z(3);
allein ist ungültige Syntax. Der einzige Weg, wie es gültig wäre, ist, wenn Sie eine Funktion namens z
hätten, der Sie die ganze Zahl 3 übergeben haben. Aber selbst das würde die lokale Variable z
nicht unbedingt auf 3 setzen.
int z(3);
wird nur in C++ kompilieren (nicht in C).
int z;
z=3;
ist gültige Syntax und wird z
auf 3 setzen.
Sowohl int z(3)
als auch int z; z=3;
sind in diesem Fall gleich.
Kein z(3);
ruft eine Funktion namens z
mit dem Argument 3
auf
Wenn Sie die Initialisierung mit dieser Syntax vornehmen möchten, müssen Sie dies bei der Deklaration tun
int z(3):
Sie können jedoch z wie folgt initialisieren
int z{3};
Dies ist die empfohlene Methode zur Initialisierung von Variablen seit C++11
Der Vorteil dieser Syntax besteht darin, dass ein Fehler auftritt, wenn eine Verengungsumwandlung vorliegt, d.h. wenn nicht garantiert ist, dass der Wert in die Zielvariable passt, erhalten Sie einen Kompilierfehler. Die Syntax kann bei beliebigen Objekten verwendet werden.
Ref.: Artikel 7, Effective Modern C++ von Scott Meyers
Nein, die erste Option ist falsch: Most Vexing Parse. Der Compiler denkt, dass z
eine Funktion ist. Allerdings sind diese im Grunde genau das Gleiche:
int z(3);
int z = 3;
Beachten Sie, dass sie in diesem Fall gleich sind, aber bei Objekten ruft die erste einen passenden Konstruktor auf, während die zweite eine Überladung des Kopierzuweisungsoperators (=
) erfordert.
Wie von AndersK vorgeschlagen, ist der beste Weg, Variablen in C++ zu initialisieren, die Verwendung von {}. Denn es gewährleistet die Typsicherheit, lassen Sie uns mehr darüber sprechen.
Jedes Objekt in C++ wird gemäß seinem Typ verwendet und ein Objekt muss vor seiner Verwendung initialisiert werden.
Der Compiler schützt vor Informationsverlust bei Typkonvertierung. Zum Beispiel,
int a{7};
Die Initialisierung ist in Ordnung
int b{7.5}
Compiler zeigt EIN FEHLER aufgrund von Informationsverlust.
Der Compiler schützt nicht vor Informationsverlust bei Typkonvertierung.
int a = 7
Die Initialisierung ist in Ordnung
int a = 7.5
Die Initialisierung ist in Ordnung, aber Informationsverlust tritt auf. Der tatsächliche Wert von a wird zu 7.0 werden
int c(7)
Die Initialisierung ist in Ordnung
int c(7.5)
Die Initialisierung ist in Ordnung, aber Informationsverlust tritt auf. Der tatsächliche Wert von a wird zu 7.0 werden
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.