Was bedeuten die folgenden Sätze in C ++:
Nullinitialisierung,
Standardinitialisierung und
Wertinitialisierung
Was sollte ein C ++ - Entwickler über sie wissen?
c++
initialization
c++-faq
Rechnung
quelle
quelle
Antworten:
Zu erkennen ist, dass die 'Wertinitialisierung' mit dem C ++ 2003-Standard neu ist - sie existiert nicht im ursprünglichen Standard von 1998 (ich denke, dies ist möglicherweise der einzige Unterschied, der mehr als eine Klarstellung ist). Siehe die Antwort von Kirill V. Lyadvinsky für die Definitionen direkt aus dem Standard.
In dieser vorherigen Antwort zum Verhalten von finden Sie
operator new
Details zum unterschiedlichen Verhalten dieser Art der Initialisierung und wann sie aktiviert werden (und wann sie sich von c ++ 98 bis C ++ 03 unterscheiden):Der Hauptpunkt der Antwort ist:
Um es gelinde auszudrücken, es ist ziemlich komplex und wenn die verschiedenen Methoden zum Einsatz kommen, sind sie subtil.
Zu beachten ist, dass MSVC auch in VS 2008 (VC 9 oder cl.exe Version 15.x) den C ++ 98-Regeln folgt.
Das folgende Snippet zeigt, dass MSVC und Digital Mars den C ++ 98-Regeln folgen, während GCC 3.4.5 und Comeau den C ++ 03-Regeln folgen:
quelle
int
, aberm()
in der dritten Zeile initialisiert der Wert m. Wichtig , wenn Sie ändernint m;
zuB m;
. :)A
undC
werden in diesem Beispiel nicht verwendet (sie werden von der anderen verknüpften Antwort übernommen). Obwohl C ++ 98 und C ++ 03 unterschiedliche Begriffe verwenden, um zu beschreiben, wieA
und wie sie aufgebautC
sind, ist das Ergebnis in beiden Standards das gleiche. Führt nurstruct B
zu unterschiedlichem Verhalten.struct C { C() : m() {}; ~C(); B m; };
, dann haben Siem.m
0. Aber wenn es standardmäßig initialisiert würde,m
wie Sie sagen, dass C ++ 03 es tut, dannm.m
würde es nicht wie in C ++ 98 initialisiert werden.C ++ 03 Standard 8.5 / 5:
quelle