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.


Log in to reply