Ist der pass-by-value-and-dann-bewegen konstruieren eine schlechte Redewendung?

Da haben wir die move-Semantik in C++, heute ist es üblich, zu tun,

void set_a(A a) { _a = std::move(a); }

Die Argumentation ist, dass, wenn a ist ein rvalue, wird die Kopie erstellte, und es wird nur ein verschieben.

Aber was passiert, wenn a ist ein lvalue? Es scheint, es wird eine Kopie Konstruktion und dann ein move-Zuweisung (unter der Annahme Einer hat einen richtigen move-Zuweisungs-operator). Verschieben von Aufgaben kann teuer werden, wenn das Objekt zu viele member-Variablen.

Auf der anderen Seite, wenn wir

void set_a(const A& a) { _a = a; }

Es wird nur eine Kopie der Abtretung. Können wir sagen, dieser Weg wird bevorzugt über den pass-by-value-idiom, wenn wir passieren lvalues?

InformationsquelleAutor jbgs | 2014-01-10
Schreibe einen Kommentar