Heim >Backend-Entwicklung >C++ >Was ist der Unterschied zwischen „=default' und „{}' für Standardkonstruktoren und -destruktoren in C?

Was ist der Unterschied zwischen „=default' und „{}' für Standardkonstruktoren und -destruktoren in C?

Linda Hamilton
Linda HamiltonOriginal
2024-12-07 04:47:10485Durchsuche

What's the Difference Between

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;
};
  • Trivial ist trivial, weil es kein vom Benutzer bereitgestelltes spezielles Mitglied hat Funktionen.
  • NotTrivial ist nicht trivial, da es einen vom Benutzer bereitgestellten Standardkonstruktor hat.
  • Trivial2 ist trivial, obwohl es einen Konstruktor hat, der als „=default“ markiert ist, da dieser immer noch den des Compilers aufruft Standardkonstruktor Generation.

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!

Stellungnahme:
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