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