Heim > Backend-Entwicklung > C++ > Warum müssen C-Klassen einen benutzerdefinierten Standardkonstruktor haben, um standardmäßig ein „const'-Objekt zu erstellen?

Warum müssen C-Klassen einen benutzerdefinierten Standardkonstruktor haben, um standardmäßig ein „const'-Objekt zu erstellen?

Barbara Streisand
Freigeben: 2024-11-29 10:10:11
Original
516 Leute haben es durchsucht

Why Must C   Classes Have a User-Defined Default Constructor to Default-Construct a `const` Object?

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:

  • POD-Klassen (Plain Old Data) keine Standardinitialisierung haben: Wenn eine POD-Klasse nicht mit einem benutzerdefinierten Konstruktor ausgestattet ist, ist dies der Fall berechtigt, standardmäßig initialisiert zu werden. POD-Objekte ohne Initialisierung erfüllen jedoch keinen praktischen Zweck, da ihr Zustand unbestimmt bleibt.
  • Const-Objekte erfordern eine sofortige Initialisierung: Im Gegensatz zu POD-Objekten erfordern Const-Objekte eine sofortige Initialisierung, da ihr Status nicht bestimmt werden kann geändert, sobald es etabliert ist. Wenn ein const-Objekt eines POD-Typs nicht initialisiert bleibt, wird es unbrauchbar, da sein Wert nicht geändert werden kann.

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.
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage