Wann ist die Überlastung der Referenzübergabe (l-Wert und r-Wert) der Wertübergabe vorzuziehen?
Ich habe gesehen, dass aoperator=
In C ++ 11 wird der Zuweisungsoperator für das Kopieren und das Verschieben von Parametern verwendet, die so geschrieben wurden, dass sie einen Wert vom selben Typ annehmen:
Foo& operator=(Foo f)
{
swap(f);
return *this;
}
Wo die Alternative mehr als doppelt so viele Zeilen mit viel Code-Wiederholung und Fehlerpotential wäre:
Foo& operator=(const Foo& f)
{
Foo f2(f);
swap(f2);
return *this;
}
Foo& operator=(Foo&& f)
{
Foo f2(std::move(f));
swap(f2);
return *this;
}
Unter welchen Umständen ist es vorzuziehen, die Überladung von ref-to-const und r-value als Wert zu übergeben, oder wann ist dies erforderlich? Ich denke überstd::vector::push_back
Dies ist beispielsweise definiert als zwei Überladungen:
void push_back (const value_type& val);
void push_back (value_type&& val);
Nach dem ersten Beispiel wurde der Wert übergebenDient als Kopierzuweisungsoperator und Verschiebungszuweisungsoperatorkonnte nichtpush_back
im Standard als Einzelfunktion definiert werden?
void push_back (value_type val);