„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum heißt „std::move“ „std::move“, wenn es eigentlich nichts verschiebt?

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

Veröffentlicht am 16.11.2024
Durchsuche:889

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

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

Die Funktion std::move hat trotz ihres Namens keinen Namen eigentlich überhaupt etwas bewegen. Es konvertiert lediglich einen L-Wert (einen Ausdruck, der sich auf ein Objekt bezieht) in einen R-Wert (einen Ausdruck, der ein temporäres Objekt darstellt). Diese Konvertierung erfolgt durch eine Umwandlung in die Kategorie xvalue, die sich von lvalues ​​und prvalues ​​unterscheidet.

Der Grund für diese Namenswahl geht auf die Geschichte des Konzepts zurück. Ursprünglich wurde die Verschiebungsoperation eingeführt, um Werte effizient auszutauschen, ohne sie zu kopieren. Die frühe Syntax hierfür umfasste die Umwandlung von L-Werten in R-Werte mithilfe von static_cast. Um die Lesbarkeit zu verbessern und die Absicht dieser Umwandlungen zu vermitteln, wurde das Schlüsselwort „move“ als syntaktischer Zucker für static_cast eingeführt.

Im damaligen Kontext sollte die Verwendung des Begriffs „move“ den Zweck dieser Umwandlungen angeben : um die Bewegungssemantik zu aktivieren. Die Konsequenz ist, dass der Code nicht die genaue technische Aktion (Umwandlung in einen R-Wert) vermittelt, sondern vielmehr das gewünschte Ergebnis (Verschieben des Objekts).

Im Laufe der Jahre hat sich das Konzept von L-Werten und R-Werten zum entwickelt Wertekategorien, die wir heute haben, wobei xvalues ​​Objekte darstellen, die in rvalues ​​umgewandelt wurden. Daher könnte das Schlüsselwort „move“ als irreführend angesehen werden, da es nur eine Aktion impliziert, die unter der Haube stattfinden kann oder auch nicht.

Die Wahl des Schlüsselworts „move“ wurde jedoch beibehalten, um die Lesbarkeit zu gewährleisten und vermeiden Sie die Verwirrung, die durch unbekannte Syntax wie cast_to_xvalue entstehen könnte. Die Funktion std::move bleibt ein wertvolles Dienstprogramm, das es Programmierern ermöglicht, die Bewegungssemantik prägnant auszudrücken, auch wenn ihr Name die technischen Details ihrer Operation möglicherweise nicht perfekt wiedergibt.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3