Konstruktor: Parameter als Referenz
-
Macht es einen Unterschied ob ich dem Konstruktor Parameter als Referenz übergebe oder by-value, wenn ich die Parameter nur benutze um Datenelemente zu initialisieren?
struct Foo { std::string value; Foo(const std::string& s) : value(s) {} };
oder
struct Foo { std::string value; Foo(std::string s) : value(s) {} };
-
Ja. Bei by-value wird eine zusätzliche Kopie angelegt, mit der der Konstruktor aufgerufen wird.
Könnte sein, dass einige Compiler das wegoptimieren, aber rein "sprachtechnisch" solltest du bei sowas immer const Ref nehmen.
-
Alles klar
-
Mit C++11 kann es ratsam sein, bei Besitzübertragung Parameter als Werte zu übergeben. Durch Move-Semantik kannst du so Kopien vermeiden, die du mit Const-Referenzen hättest.
struct Foo { std::string value; Foo(std::string s) : value(std::move(s)) {} };
Siehe auch Want Speed? Pass by Value.