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?
c++
move
c++-standard-library
Iamanon
quelle
quelle
move
hätte angerufen werden sollenmake_rvalue
oder so ähnlich. Es ist frustrierend, immer wieder zu erklären, dass der einzelne Parameterstd::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 alsstd::move
wäre länger gewesen, was scheiße ist.Antworten:
Dies kann verwirrend sein, insbesondere diejenigen, die nicht an Sprachen gewöhnt sind, die Überladung unterstützen. Es ist richtig, dass Programmierrichtlinien normalerweise Überladungen mit unterschiedlichen Bedeutungen abschrecken.
Es ist aber auch nicht sehr schwer zu lernen, dass es zwei Funktionen mit demselben Namen gibt, obwohl dies subjektiv ist. Die verschiedenen Argumentlisten bieten ausreichend Kontext, um sie leicht voneinander zu unterscheiden.
Weil die Designer der Sprache für beide Funktionen den gleichen Namen gewählt haben.
std::move
ist eine sehr prägnante Möglichkeit, beide Funktionen auszudrücken. Der in<algorithm>
ist komplementär zustd::copy
aus demselben Header.Die Beschreibung der Funktion der Funktion ist nicht das einzige, was der Name der Funktion ausdrücken kann. In diesem Fall drückt der Name die Absicht des Programmierers aus, der die Funktion verwendet hat: Der Programmierer beabsichtigt, - wenn möglich - vom Argument lvalue abzuweichen.
Dies ist etwas, das Programmierer möglicherweise häufig schreiben müssen. Daher besteht Bedarf an einem sehr kurzen Namen.
quelle