Implizite Verschiebungskonstruktoren und Zuweisungsoperatoren in frühen C 11-Entwürfen
Trotz der weit verbreiteten Implementierung von Standardkopierkonstruktoren und Zuweisungsoperatoren in C ist die Das Fehlen standardmäßiger Verschiebungskonstruktoren und Zuweisungsoperatoren in frühen Entwürfen des C 11-Standards hat bei vielen Fragen aufgeworfen Programmierer.
Gründe für anfängliches Fehlen
Die implizite Generierung von Verschiebungsoperationen war Gegenstand anhaltender Debatten innerhalb der C-Community. In frühen Entwürfen des C 11-Standards fehlten diese impliziten Funktionen aufgrund von Bedenken hinsichtlich der Beibehaltung von Code, der auf nicht beweglichen Typen beruhte. Darüber hinaus verkomplizierte das Verhalten von std::move mit nicht beweglichen Objekten, die den Zuweisungsoperator verwenden, das Problem.
Aktuelle Spezifikation
Ab der N3225-Spezifikation vom November, wenn Eine Klasse definiert nicht explizit einen Verschiebungskonstruktor, er wird im Folgenden implizit als Standardwert deklariert Bedingungen:
Ähnliche Bedingungen gelten für die implizite Deklaration des Verschiebungszuweisungsoperators. Diese Änderungen stehen im Einklang mit den in N3203 und N3201 dargelegten Grundsätzen, die strengere Bedingungen für die Generierung impliziter Verschiebungen befürworten.
Problemumgehung
In Ermangelung impliziter Verschiebungsvorgänge zu Beginn In C 11-Entwürfen besteht eine Problemumgehung darin, einen Verschiebungszuweisungsoperator und einen Verschiebungskonstruktor manuell zu implementieren. Um die Implementierung dieser Operatoren in jeder Klasse zu vermeiden, kann eine Makrolösung eingesetzt werden. Die Antwort von GManNickG auf die Frage zum Stapelüberlauf liefert ein geeignetes Beispiel.
Das obige ist der detaillierte Inhalt vonWarum fehlten implizite Verschiebungskonstruktoren und Zuweisungsoperatoren in frühen C 11-Entwürfen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!