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:
Seit der November-Veröffentlichung des C-Standards (N3225) implizite Verschiebungskonstruktoren und -zuweisungen Operatoren können unter den folgenden Bedingungen generiert werden:
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.
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!