Heim >Backend-Entwicklung >C++ >Wann generieren C-Compiler automatisch Verschiebungskonstruktoren und Zuweisungsoperatoren?

Wann generieren C-Compiler automatisch Verschiebungskonstruktoren und Zuweisungsoperatoren?

DDD
DDDOriginal
2024-12-19 09:34:10279Durchsuche

When Do C   Compilers Automatically Generate Move Constructors and Assignment Operators?

Automatische Generierung von Verschiebungsoperationen in C

In C 98 konnte der Compiler automatisch Kopierkonstruktoren und Kopierzuweisungsoperatoren für Klassen generieren. Mit der Einführung der Bewegungssemantik in C 11 stellen sich jedoch Fragen zur automatischen Generierung von Bewegungsoperationen.

Werden Bewegungskonstruktoren und Bewegungszuweisungsoperatoren automatisch generiert?

Nein, im Gegensatz zu Kopierkonstruktoren und Kopierzuweisungsoperatoren generiert der Compiler nicht automatisch Verschiebungsvorgänge für Klassen mit benutzerdefinierten Konstruktoren oder Zuweisungen Operatoren.

Fälle, in denen Verschiebungsvorgänge nicht automatisch generiert werden

Verschiebungsvorgänge werden nicht automatisch generiert, wenn:

  • Die Klasse hat einen Benutzer -definierter Konstruktor oder Kopierkonstruktor.
  • Die Klasse verfügt über einen benutzerdefinierten Zuweisungsoperator oder eine Kopierzuweisung Operator.
  • Die Klasse hat einen nicht trivialen Destruktor.
  • Die Klasse hat eine Basisklasse mit einem nicht trivialen Destruktor.
  • Die Klasse enthält einen nicht kopierbaren oder nicht bewegliches Mitglied.

Bestimmen der automatischen Erzeugung einer Bewegung Operationen

Um festzustellen, ob Verschiebungsoperationen automatisch für eine Klasse generiert werden, berücksichtigen Sie Folgendes:

  • Wenn die Klasse nur einen Standardkonstruktor und keine benutzerdefinierten Konstruktoren hat oder Zuweisungsoperatoren, Verschiebungsoperationen werden generiert.
  • Wenn die Klasse einen benutzerdefinierten Konstruktor oder Zuweisungsoperator hat, müssen Sie die Verschiebung explizit deklarieren Operationen.
  • Wenn die Klasse einen nicht-trivialen Destruktor oder eine Basisklasse mit einem nicht-trivialen Destruktor hat, müssen Sie die Verschiebungsoperationen explizit deklarieren.

Abwertung von Automatisch Generierung von Verschiebungsoperationen

In C 20 ist die automatische Generierung von Verschiebungsoperationen veraltet, wenn die Klasse a deklariert Destruktor oder beliebige Kopiermitglieder (Kopierkonstruktor, Kopierzuweisungsoperator). Um die Kompatibilität mit zukünftigen Versionen von C sicherzustellen, wird empfohlen, Verschiebungsvorgänge explizit für Klassen zu deklarieren, die diese erfordern.

Das obige ist der detaillierte Inhalt vonWann generieren C-Compiler automatisch Verschiebungskonstruktoren und Zuweisungsoperatoren?. 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