Heim > Backend-Entwicklung > C++ > Warum fehlten implizite Verschiebungskonstruktoren und Zuweisungsoperatoren in frühen C 11-Entwürfen?

Warum fehlten implizite Verschiebungskonstruktoren und Zuweisungsoperatoren in frühen C 11-Entwürfen?

Linda Hamilton
Freigeben: 2024-12-06 10:18:13
Original
547 Leute haben es durchsucht

Why Were Implicit Move Constructors and Assignment Operators Absent in Early C  11 Drafts?

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:

  • Kein vom Benutzer deklarierter Kopierkonstruktor
  • Kein vom Benutzer deklarierter Kopierzuweisungsoperator
  • Kein vom Benutzer deklarierter Verschiebungszuweisungsoperator
  • Nein Vom Benutzer deklarierter Destruktor
  • Kein implizites Löschen der Verschiebung Konstruktor

Ä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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage