Heim >Backend-Entwicklung >C++ >Was ist der Unterschied zwischen „=default' und „{}' für Standardkonstruktoren und -destruktoren in C?
Den Unterschied zwischen „=default“ und „{}“ für Standardkonstruktor und -destruktor verstehen
Während „=default“ und „{ }" mag für Standardkonstruktoren und -destruktoren austauschbar erscheinen, es gibt jedoch wichtige Unterschiede bei der Betrachtung nicht-virtueller Destruktoren und Konstruktoren.
Nicht-virtuelle Destruktoren
Beim Umgang mit nicht-virtuellen Destruktoren spielt die Syntax „=default“ eine wichtige Rolle. Es weist den Compiler an, den Destruktor wie bei trivialen Klassen automatisch zu generieren, sodass der Typ als trivial gilt. Andererseits erstellt „{}“ einen vom Benutzer bereitgestellten Destruktor, der den Trivialitätsstatus der Klasse ändert.
Nicht-virtuelle Konstruktoren
Ähnlich gilt für nicht -virtuelle Konstruktoren: Die Verwendung von „=default“ ermöglicht es dem Compiler, einen Standardkonstruktor zu generieren und so die Trivialität beizubehalten. Allerdings gibt „{}“ einen vom Benutzer bereitgestellten Konstruktor an, der sich möglicherweise auf die Trivialität der Klasse auswirkt.
Trivialklassen
In C 11 ist eine triviale Klasse eine Klasse, die dies tut Es gibt keine vom Benutzer bereitgestellten speziellen Memberfunktionen (Standardkonstruktor, Konstruktoren/Zuweisungen zum Kopieren/Verschieben, Destruktoren). Diese Funktionen werden automatisch generiert und ermöglichen die Anwendung von Optimierungen wie memcpy.
Beispiel
Betrachten Sie den folgenden Code:
struct Trivial { int foo; }; struct NotTrivial { int foo; NotTrivial() {} }; struct Trivial2 { int foo; Trivial2() = default; };
Fazit
Obwohl „=default“ und „{}“ ähnlich erscheinen mögen, können sie bei ihrer Verwendung erhebliche Auswirkungen auf die Trivialität von Klassen haben mit nicht-virtuellen Destruktoren oder Konstruktoren. „=default“ behält das Standardverhalten des Compilers und die Trivialität bei, während „{}“ vom Benutzer bereitgestellte Funktionen erstellt und möglicherweise den Trivialitätsstatus der Klasse ändert.
Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen „=default' und „{}' für Standardkonstruktoren und -destruktoren in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!