Heim > Backend-Entwicklung > C++ > Hauptteil

Warum heißt „std::move' „std::move', wenn es nichts verschiebt?

Mary-Kate Olsen
Freigeben: 2024-11-20 04:40:02
Original
875 Leute haben es durchsucht

Why is `std::move` Called `std::move` if it Doesn't Move Anything?

Warum heißt std::move std::move?

Im Gegensatz zu seinem Namen verschiebt std::move nichts physisch; Stattdessen wird das Objekt in eine R-Wert-Referenz oder genauer gesagt in einen X-Wert umgewandelt. Die Entscheidung, die Funktion move zu benennen, sollte nicht täuschen oder verwirren, sondern den Code lesbarer machen.

In den frühen Phasen der R-Wert-Referenzen musste die Funktion std::swap hinsichtlich der Leistung optimiert werden. Die ursprüngliche Methode verwendete explizit static_cast Ausdrücke, die den zugrunde liegenden Zweck des Codes verschleierten.

Durch die Einführung von std::move wurden die expliziten Umwandlungen durch Syntaxzucker ersetzt, der die Absicht des Codes hervorhob: die Bewegungssemantik zu ermöglichen. Das Erläutern der genauen technischen Details, wie zum Beispiel „cast to rvalue“, hätte zusätzliche Fragen aufgeworfen und den Kernpunkt verschleiert.

Die Geschichte von std::move

Die Geschichte von std:: move geht auf den Vorschlag für R-Wert-Referenzen im Jahr 2002 zurück. Die Move-Funktion wurde ursprünglich als Syntaxzucker für static_cast eingeführt, mit der Annahme, dass damals nur wenige Programmierer den Zusammenhang zwischen R-Werten und der Move-Semantik vollständig verstanden.

Mit der Weiterentwicklung der C-Sprache wurde das Konzept der R-Werte zu dem verfeinert, was wir heute als Wertkategorien kennen. Die Verwendung eines anderen Namens, wie zum Beispiel cast_to_xvalue, um den Vorgang genauer zu beschreiben, könnte die Lesbarkeit beeinträchtigt haben.

Was std::move macht

Im Kern wandelt std::move einfach ein Objekt um zu einem x-Wert. Diese Umwandlung hat keine Auswirkungen auf trivial bewegliche Objekte und stellt bei Objekten mit Verschiebungszuweisungsoperatoren sicher, dass der Verschiebungszuweisungsoperator anstelle des Kopierzuweisungsoperators aufgerufen wird.

In Bezug auf den generierten Objektcode std:: move hat keine Auswirkung auf trivial bewegliche Objekte. Bei Objekten mit Verschiebungszuweisungsoperatoren kann sich die Überladungsauflösung ändern. Allerdings verschwindet std::move zur Laufzeit praktisch und seine einzige Auswirkung ist zur Kompilierungszeit.

Das obige ist der detaillierte Inhalt vonWarum heißt „std::move' „std::move', wenn es nichts verschiebt?. 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