2015-03-16 15 views
7

ich dieses Buch las ‚Eine Tour durch C++‘ genannt von Bjarne Stroustrup und im Inneren wird erwähnt, dass es grundsätzlich zwei Möglichkeiten der Initialisierung sind:Verschiedene Formen der Initialisierung

int a = 5,2; // Speichert den abgeschnittenen Wert

int a {5.2}; // Compiler wirft Fehler

Wie Sie sehen können, ist die letztere Methode sicherer und empfohlen.

Ich habe jedoch festgestellt, dass:

int a (5.2);

funktioniert auch (und im Gegensatz zur zweiten Version überprüft es nicht, ob der Typ übereinstimmt).

Also, kann jemand bitte den dritten Fall erklären, ich meine, wann es verwendet werden sollte und wie es anders ist als der erste Fall.

+0

Wenn es zwei Arten zu sagen, bedeutet dies wahrscheinlich, Direkt Initialisierung vs. Kopie-Initialisierung. Sowohl der zweite als auch dein anderer Weg sind direkte Initialisierungen. Das heißt nicht, dass sie die gleiche Semantik haben. – chris

+0

Ein Grund für die Verwendung der geschweiften Klammern Notation ist, dass es "die am meisten ärgerliche Syntaxanalyse" vermeidet, wo eine beabsichtigte Variablendeklaration als eine Funktionsdeklaration interpretiert wird. Und das ist in der Tat sicherer. Ein Grund für die Verwendung der C++ 03 runden Klammernotation besteht darin, dass Sie nicht versehentlich eine Listeninitialisierung geben kann und dass es nicht so unscharf ist, Konvertierungen angeblich "einzuschränken", insbesondere für Aufzählungen. –

+0

Die Idee hinter dem Fehler ist, dass "int a = 5.2;" eine ziemlich fischige Sache ist, die in erster Linie schreiben möchte, es ist eher ein Tippfehler als eine echte Absicht. –

Antwort

5

Wenn Sie int a verwenden (5.2); Sie rufen den Konstruktor von int auf, was eine C++ - Methode zum Initialisieren von Variablen ist. Dies entspricht anderen. Nach http://www.cplusplus.com/doc/tutorial/variables/:

In C++ gibt es drei Möglichkeiten, Variablen zu initialisieren. Sie sind alle gleichwertig und erinnern an die Entwicklung der Sprache über die Jahre:

Der erste, bekannt als c-like Initialisierung (weil es aus der Sprache C vererbt wird), besteht aus Anfügen einer gleichen sign gefolgt von der Wert, auf den die Variable initialisiert wird:

type identifier = initial_value; Zum Beispiel kann eine Variable des Typ int bezeichnet x zu erklären und es auf einen Wert von Null aus dem gleichen Moment initialisiert sie deklariert ist, können wir schreiben:

int x = 0; 

Ein zweites Verfahren, als Konstruktor Initialisierung bekannt (eingeführt von der C++ - Sprache), umschließt den Anfangswert zwischen Klammern (()):

Typkennung (initial_value); Zum Beispiel:

int x (0); 

Schließlich wird ein drittes Verfahren, als einheitliche Initialisierung bekannt, ähnlich wie oben, aber unter Verwendung von geschweiften Klammern ({}) anstelle von Klammern (diese wurde durch die Änderung des C++ Standard eingeführt , in 2011):

type identifier {initial_value}; Zum Beispiel:

int x {0}; 
Verwandte Themen