Warum benötigt C einen vom Benutzer bereitgestellten Standardkonstruktor, um ein const-Objekt standardmäßig zu erstellen?
Der C-Standard schreibt vor, dass es sich um ein Programm handelt Bei Aufrufen der Standardinitialisierung eines Objekts eines const-qualifizierten Typs muss der zugrunde liegende Klassentyp über einen vom Benutzer bereitgestellten Standardkonstruktor verfügen. Diese Anforderung ergibt sich aus der Tatsache, dass:
Um dieses Dilemma zu vermeiden, schreibt der Standard vor, dass const-Objekte nicht aus fehlenden POD-Typen erstellt werden können ein vom Benutzer bereitgestellter Standardkonstruktor. Dadurch wird sichergestellt, dass Const-Objekte bei der Erstellung immer initialisiert werden.
Unterscheidung zwischen POD- und Nicht-POD-Klassen
Zur Klarstellung: Die Anforderung des Standards gilt speziell für Const-Objekte von Non -POD-Klassen. POD-Klassen, denen virtuelle Funktionen oder Basisklassen fehlen und deren Datenelemente selbst PODs sind, können auch ohne einen benutzerdefinierten Konstruktor standardmäßig initialisiert werden. Im Gegensatz dazu erfordern Nicht-POD-Klassen einen vom Benutzer bereitgestellten Standardkonstruktor, um die Standardinitialisierung zu ermöglichen.
Anschauliches Beispiel
Bedenken Sie den folgenden Codeausschnitt:
struct B { B(): x(42) {} int doSomeStuff() const { return x; } int x; }; struct A { A() {} // Required by the standard B b; // Illustration purpose }; int main() { const A a; // Valid due to user-provided default constructor in A. }
In diesem Beispiel kann das const-Objekt „a“ von Struktur A standardmäßig erstellt werden, da A über a verfügt Vom Benutzer bereitgestellter Standardkonstruktor, der die Anforderungen des Standards für Nicht-POD-Klassen erfüllt.
Das obige ist der detaillierte Inhalt vonWarum müssen C-Klassen einen benutzerdefinierten Standardkonstruktor haben, um standardmäßig ein „const'-Objekt zu erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!