8 Stimmen

Unterschiedliche Möglichkeiten, Variablen zu initialisieren

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;

?

8voto

PaulG Punkte 6679

Sie können verwenden:

int z;
z = 3;

Oder einfach:

int z = 3;

Oder:

int z(3);

Oder:

int z = int(3);

4voto

Engineer2021 Punkte 3157

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.

3voto

AndersK Punkte 34870

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

0voto

yizzlez Punkte 8757

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.

0voto

Forhad Hossain Punkte 371

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.

Typsicherheit

Jedes Objekt in C++ wird gemäß seinem Typ verwendet und ein Objekt muss vor seiner Verwendung initialisiert werden.

Sichere Initialisierung: {}

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.

Unsichere Initialisierung: = oder ()

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.com

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.

Powered by:

X