„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum fehlten in frühen C++11-Entwürfen Standardverschiebungsimplementierungen?

Warum fehlten in frühen C++11-Entwürfen Standardverschiebungsimplementierungen?

Veröffentlicht am 19.11.2024
Durchsuche:454

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 a Thema der Debatte. Dies führte zu Änderungen in nachfolgenden Entwürfen, die zu folgendem Verhalten in derzeit verfügbaren Compilern führten:

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.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3