Was ist optimal in diesem Code?Kopieren oder Referenz im Konstruktor?
class C
{
public:
C(const std::string& str): str_(str) {}
private:
std::string str_;
}
Oder
class C
{
public:
C(std::string str): str_(str) {}
private:
std::string str_;
}
Bin ich richtig, dass in dem zweiten Code, den ich habe zwei Kopieren und ich habe eine in dem ersten Code? Also zuerst ist besser?
Aber manchmal würde Ich mag C-Klasse wie erstellen:
C c(std::string());
Und ich habe eine Warnung (GCC), aber Code ist in Ordnung, in diesem Fall ...
Es ist besser, die Unveränderbarkeit anzugeben. (Aber da dies ein Konstruktor ist, ist es sowieso ziemlich offensichtlich.) –
Ich denke, Variante 2, wenn Sie 'str_ (str)' in 'str_ (std :: move (str))' auch eine Kopie im schlimmsten Fall, und 0 Kopien, wenn Sie std :: string in 'C' Objekt verschieben und nicht mehr verwenden. Außerdem müssen Sie nicht zwei Konstruktoren erstellen, sondern eine Kopie für die andere, so dass Variante 2 in 'C++ 11' besser ist – fghj
nur zwei Konstruktoren zum Kopieren (' C (const std :: string &) ') und Verschieben ('C (std :: string &&)'). Daher wählt der Compiler den Konstruktor abhängig vom Kontext aus, wenn man bedenkt, dass man nicht von lvalue weggehen sollte (weil es ihn korrumpieren würde), und es keinen Grund gibt, von rvalue zu kopieren. Gleiches gilt für 'operator =' –