Ist das Pass-by-Value-and-Then-Move-Konstrukt eine schlechte Redewendung?
Da wir in C ++ eine Verschiebungssemantik haben, ist dies heutzutage üblich
void set_a(A a) { _a = std::move(a); }
Die Argumentation ist, dass wenna
Ist dies ein Wert, wird die Kopie entfernt und es wird nur ein Zug ausgeführt.
Aber was passiert wenna
ist ein lWert? Es scheint, als gäbe es eine Kopierkonstruktion und dann eine Verschiebungszuweisung (vorausgesetzt, A hat einen geeigneten Verschiebungszuweisungsoperator). Verschiebungszuweisungen können kostspielig sein, wenn das Objekt zu viele Mitgliedsvariablen enthält.
Auf der anderen Seite, wenn wir das tun
void set_a(const A& a) { _a = a; }
Es wird nur eine Kopieraufgabe geben. Können wir sagen, dass dieser Weg der Pass-by-Value-Redewendung vorgezogen wird, wenn wir l-Werte übergeben?