Per le classi abilitate allo spostamento esiste una differenza tra queste due?Passaggio per valore o 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));
}
mia comprensione è che se si utilizza un valore assegnabile myvec
avete richiesto inoltre di introdurre const Vectype&
versione di Foo::bar()
dal Vectype&&
non si legano. A parte questo, nel caso di validità, Foo::bar(Vectype)
costruirà il vettore usando il costruttore di mosse o meglio ancora eliderà la copia tutti insieme vedendo che vec è un valore rvalore (sarebbe?). Quindi c'è una ragione convincente per non preferire la dichiarazione del valore invece dei sovraccarichi lvalue e rvalue? (Considera necessario copiare il vettore nella variabile membro in ogni caso.)
prima di ogni pedanteria, so che i sovraccarichi sono ambigui. –