Heim >Backend-Entwicklung >C++ >Warum fehlten in frühen C 11-Entwürfen Standard-Move-Implementierungen?

Warum fehlten in frühen C 11-Entwürfen Standard-Move-Implementierungen?

Barbara Streisand
Barbara StreisandOriginal
2024-11-19 19:13:02276Durchsuche

Why Were Default Move Implementations Absent in Early C  11 Drafts?

Warum fehlen standardmäßige Verschiebungsimplementierungen in frühen C 11-Entwürfen?

In frühen Versionen des C 11-Standards war die implizite Generierung von Verschiebungskonstruktoren und Zuweisungsoperatoren eine Thema der Debatte. Dies führte zu Änderungen in nachfolgenden Entwürfen, was zu folgendem Verhalten in derzeit verfügbaren Compilern führte:

Implizite Verschiebungssemantik

Seit der November-Veröffentlichung des C-Standards (N3225) implizite Verschiebungskonstruktoren und -zuweisungen Operatoren können unter den folgenden Bedingungen generiert werden:

  • Die Klasse hat keinen vom Benutzer deklarierten Kopierkonstruktor.
  • Die Klasse hat keinen vom Benutzer deklarierten Kopierzuweisungsoperator.
  • Die Klasse hat keinen vom Benutzer deklarierten Verschiebungszuweisungsoperator.
  • Die Klasse hat keinen vom Benutzer deklarierten Destruktor.
  • Der Verschiebungskonstruktor würde nicht implizit als gelöscht definiert.

Erklärung des Fehlens in frühen Entwürfen

Die Entscheidung, keine standardmäßigen Verschiebungskonstruktoren/Zuweisungsimplementierungen in frühe Entwürfe aufzunehmen, war das Ergebnis von Bedenken hinsichtlich der Möglichkeit von Verwirrung und unerwartetem Verhalten. Nachfolgende Überarbeitungen haben diese Bedenken jedoch ausgeräumt, indem die Bedingungen für die implizite Verschiebungsgenerierung verschärft wurden.

Problemumgehung

Wenn Sie nach einer Möglichkeit suchen, die Verschiebungssemantik zu nutzen, ohne explizite Verschiebungskonstruktoren/Zuweisungsoperatoren zu schreiben , können Sie [GManNickGs Makro](https://stackoverflow.com/a/12316884/8674521) verwenden. Dieses Makro generiert die erforderliche Bewegungssemantik für Ihre Klasse.

Durch die Implementierung der Bewegungssemantik können Sie auch die Bereitstellung einer Swap-Member-Funktion deaktivieren.

Das obige ist der detaillierte Inhalt vonWarum fehlten in frühen C 11-Entwürfen Standard-Move-Implementierungen?. 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