Heim >Backend-Entwicklung >C++ >Warum heißt „std::move' „std::move', wenn es eigentlich nichts verschiebt?
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äzise auszudrücken, auch wenn ihr Name die technischen Details ihrer Funktionsweise möglicherweise nicht perfekt wiedergibt.
Das obige ist der detaillierte Inhalt vonWarum heißt „std::move' „std::move', wenn es eigentlich nichts verschiebt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!