Sagen Sie, ich habe diese Klasse:
%Vor% Wenn ich die member()
in der Initialisierungsliste des Konstruktors von Awesome
weglasse, wird der Konstruktor von member
automatisch aufgerufen? Und wird es nur aufgerufen, wenn ich member
nicht in die Initialisierungsliste einfüge?
Aus § 8.5
Wenn für ein Objekt kein Initialisierer angegeben ist, ist das Objekt Standard-initialisiert; Wenn keine Initialisierung durchgeführt wird, ein Objekt mit Die automatische oder dynamische Speicherdauer hat einen unbestimmten Wert. [ Hinweis: Objekte mit statischer oder Thread-Speicherdauer werden initialisiert, siehe 3.6.2. -Hinweis]
Update für zukünftige Referenzen : Die Bedeutung von default initialized wird als
definiertDie Standardinitialisierung eines Objekts vom Typ T bedeutet:
- wenn T ein a ist (möglicherweise cv-qualifiziert) Klassentyp (Abschnitt 9), der Standardkonstruktor denn T heißt (und die Initialisierung ist schlecht ausgebildet, wenn T keine hat zugänglicher Standardkonstruktor) ;
- wenn T ein Array-Typ ist, jeder Element ist default-initialisiert;
- sonst ist keine Initialisierung ausgeführt.
Wenn ein Programm die Standardinitialisierung von aufruft Ein Objekt eines const-qualifizierten Typs T, T soll ein Klassentyp mit a sein Vom Benutzer bereitgestellter Standardkonstruktor.
Weiter variiert es von dem initialisierten Wert unter Bezugnahme auf: -
Um ein Objekt vom Typ T zu value-initialisieren bedeutet:
- wenn T ist a (möglicherweise cv-qualifiziert) Klassentyp (Abschnitt 9) mit einem Benutzer zur Verfügung gestellt Konstruktor (12.1), dann wird der Standardkonstruktor für T aufgerufen (und Die Initialisierung ist schlecht ausgebildet, wenn T keinen zugänglichen Standard hat Konstruktor); - wenn T eine (möglicherweise cv-qualifizierte) Nicht-Vereinigungsklasse ist Geben Sie ohne einen vom Benutzer bereitgestellten Konstruktor ein, dann ist das Objekt Null initialisiert und, wenn T implizit deklariert Standardkonstruktor ist nicht-trivial, dieser Konstruktor wird aufgerufen.
- wenn T ein Array ist type, dann wird jedes Element value-initialisiert; andernfalls - Objekt ist Null-initialisiert.
Ja. Wenn eine Variable in der Initialisierungsliste nicht angegeben ist, wird sie standardmäßig automatisch erstellt.
Standard contruction bedeutet, dass, wenn membertype
ein class
oder struct
ist, wird es standardmäßig konfiguriert, wenn es ein eingebautes Array ist, dann wird jedes Element standardmäßig sein konstruiert und wenn es sich um einen eingebauten Typ handelt, wird keine Initialisierung ausgeführt (es sei denn, das Awesome
-Objekt hat eine statische oder fadenlokale Speicherdauer). Der letzte Fall bedeutet, dass die Elementvariable unvorhersehbaren Datenmüll enthalten kann (und häufig auch enthält), falls das Objekt Awesome
auf dem Stapel erstellt oder auf dem Heap zugewiesen wird.
Tags und Links c++ constructor header