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