Für bewegungsaktivierte Klassen gibt es einen Unterschied zwischen diesen beiden?Überschreiten Sie durch Wert oder rvalue-ref
struct Foo {
typedef std::vector<std::string> Vectype;
Vectype m_vec;
//this or
void bar(Vectype&& vec)
{
m_vec = std::move(vec);
}
//that
void bar(Vectype vec)
{
m_vec = std::move(vec);
}
};
int main()
{
Vectype myvec{"alpha","beta","gamma"};
Foo fool;
fool.bar(std::move(myvec));
}
Mein Verständnis ist, dass wenn Sie ein L-Wert verwenden myvec
Sie auch const Vectype&
Version von Foo::bar()
seit Vectype&&
einzuführen erforderlich wird nicht binden. Abgesehen davon wird Foo::bar(Vectype)
im Rvalue-Fall den Vektor mit dem Move-Konstruktor konstruieren oder besser noch mit der Kopie, die alle zusammen vec ist ein Rvalue (oder?). Gibt es also einen zwingenden Grund, die Deklaration nach Wert anstelle von lvalue und rvalue overloads zu bevorzugen? (Überlege, dass ich den Vektor auf jeden Fall in die Elementvariable kopieren muss.)
vor jeder Pedanterie Ich weiß, dass die Überlastungen zweideutig sind. –