Heim >Backend-Entwicklung >C++ >Wann generiert der C 11-Compiler automatisch Verschiebungsvorgänge?

Wann generiert der C 11-Compiler automatisch Verschiebungsvorgänge?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-27 07:53:12219Durchsuche

When Does the C  11 Compiler Automatically Generate Move Operations?

Regeln für die automatische Generierung von Verschiebevorgängen

In C 11 unterscheidet sich die Fähigkeit des Compilers, Verschiebevorgänge automatisch zu generieren, von den Regeln für Kopiervorgänge in C 98.

Move Constructor und Move Assignment Operator

Unter den folgenden Bedingungen generiert der Compiler automatisch einen Verschiebungskonstruktor und einen Verschiebungszuweisungsoperator:

  • Die Klasse verfügt über keinen vom Benutzer deklarierten Kopierkonstruktor.
  • Die Klasse hat keinen vom Benutzer deklarierten Kopierzuweisungsoperator.
  • Die Klasse hat keinen explizit deklarierten Verschiebungskonstruktor oder Verschiebungszuweisung Operator.

Fälle, in denen Verschiebungsoperationen nicht automatisch generiert werden

Der Compiler generiert Verschiebungsoperationen nicht automatisch, wenn eine der folgenden Bedingungen erfüllt ist:

  • Die Klasse verfügt über einen vom Benutzer deklarierten Kopierkonstruktor und/oder Kopierzuweisungsoperator.
  • Die Klasse verfügt über ein explizit deklarierter, aber nicht definierter Verschiebungskonstruktor oder Verschiebungszuweisungsoperator.
  • Die Klasse deklariert einen Destruktor.

Tool zur Überprüfung automatischer Generierungsregeln

Die folgende Ressource bietet eine visuelle Darstellung der Regeln für die automatische Generierung spezieller Mitglieder, einschließlich Verschiebungsvorgänge:

[Bild von Howard Hinnants ACCU 2014-Präsentationsfolie](https://i.sstatic.net/b2VBV.png)

Zusätzliche Klarstellung

Die roten Quadrate in der Tabelle weisen auf veraltetes Verhalten hin . Wenn Sie vermeiden möchten, sich auf eine veraltete Funktion zu verlassen, sollten Sie die „Regel von 3“ aus C 98/03 befolgen: Deklarieren Sie beide Kopiermitglieder, wenn Sie den Destruktor deklarieren, oder deklarieren Sie mindestens ein Kopiermitglied.

Das obige ist der detaillierte Inhalt vonWann generiert der C 11-Compiler automatisch Verschiebungsvorgänge?. 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