Meistens wird std::move
hier auf die <utility>
Version verwiesen .
Das std::move
in macht<algorithm>
tatsächlich das, was sein Name andeutet, move , während das std::move
in<utility>
sein Argument auf einen x-Wert umwandelt, was im Grunde nur ein Vorverarbeitungsschritt ist, um den x-Wert schließlich in einen l-Wert zu verschieben. Ist es also nicht verwirrend, move
wenn beide benannt werden, wenn die Funktionen für beide unterschiedlich sind?
move
hätte angerufen werden sollen make_rvalue
oder so ähnlich. Es ist frustrierend, immer wieder zu erklären, dass der einzelne Parameter std::move
tatsächlich nichts bewegt.
<algorithm>
ist einfach der in einem <utility>
auf einen ganzen Bereich angewendeten.
<algorithm>
führt die Verschiebung tatsächlich aus (vorausgesetzt, für den Typ, den wir verschieben, ist ein Verschiebungszuweisungsoperator definiert).
std::move
einen Operator anstelle einer Bibliotheksfunktion erstellen sollen. Jeder bessere Name als std::move
wäre länger gewesen, was scheiße ist.