Meistens wird std::movehier auf die <utility>Version verwiesen .
Das std::movein macht<algorithm> tatsächlich das, was sein Name andeutet, move , während das std::movein<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, movewenn beide benannt werden, wenn die Funktionen für beide unterschiedlich sind?
movehätte angerufen werden sollen make_rvalueoder so ähnlich. Es ist frustrierend, immer wieder zu erklären, dass der einzelne Parameter std::movetatsä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::moveeinen Operator anstelle einer Bibliotheksfunktion erstellen sollen. Jeder bessere Name als std::movewäre länger gewesen, was scheiße ist.