Werden integrierte Typen durch den Standardkonstruktor von C initialisiert?
In C ist der vom Compiler generierte implizite Standardkonstruktor Verantwortlich für die Initialisierung der Klassenmitglieder. Es gibt jedoch ein weit verbreitetes Missverständnis, dass sich dieses Verhalten auf integrierte Typen erstreckt.
Standardinitialisierungsverhalten
Der implizite Standardkonstruktor führt nicht eine Initialisierung durch Mitglieder integrierter Typen. Wenn ein solcher Konstruktor ohne benutzerdefinierte Initialisierung verwendet wird, bleiben die Mitglieder integrierter Typen nicht initialisiert.
Ausnahmen von der Regel
Bei Standardkonstruktoren ist dies normalerweise nicht der Fall Beim Initialisieren integrierter Typen kann es unter bestimmten Umständen zu einer Initialisierung kommen:
Wert Initialisierung:
In C 03 und höher ruft die Syntax C() die Wertinitialisierung für Klasseninstanzen auf. Wenn die Klasse keinen vom Benutzer deklarierten Konstruktor hat, initialisiert die Wertinitialisierung integrierte Typmitglieder auf Null.
Aggregatinitialisierung:
Aggregatinitialisierungssyntax, z. B. C c = {} führt die Initialisierung ohne Verwendung eines Konstruktors durch. Dies führt zu einer Nullinitialisierung der integrierten Typmitglieder.
Beispiel:
Betrachten Sie die folgende Klasse ohne einen vom Benutzer deklarierten Konstruktor:
class C { public: int x; };
Ohne explizit Initialisierung:
C c; // Compiler-provided default constructor used // c.x contains garbage
Mit expliziter Wertinitialisierung:
C c = C(); // Value-initialization used assert(c.x == 0);
Mit aggregierter Initialisierung:
C c = {}; // Aggregate initialization assert(c.x == 0);
Es ist wichtig zu beachten, dass das oben beschriebene Verhalten je nach verwendeter C-Version und spezifischer Klasse variieren kann Definition.
Das obige ist der detaillierte Inhalt vonInitialisieren die Standardkonstruktoren von C integrierte Typen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!