Eventuali duplicati:
Is pass-by-value a reasonable default in C++11?Quando dovrei scegliere copia elision passando argomento per riferimento const?
sto leggendo Want Speed? Pass by Value. da Dave Abrahams sulla copia elisione e RVO. E mi chiedo perché abbiamo bisogno della copia elision?
Mi è stato detto troppe volte che dovresti passare gli argomenti della funzione con riferimento const per evitare di copiare (quasi ogni libro C++ che ho letto mi ha detto di questo).
Supponiamo di avere due funzioni:
int f1(const string &s);
int f2(string s);
Se l'argomento reale è un rvalue, la copia sarà evitata in entrambe le funzioni. Ma se l'argomento attuale è un lvalue, la copia sarà evitata solo in f1, non in f2. Allora, perché abbiamo bisogno di questa funzionalità?
Una nota: il secondo caso spesso si verifica nei costruttori. Dato 'struct S {S (...): s (s) {} std :: string s; }; ', allora è meglio usare' std :: string s' al posto di '...' piuttosto che un 'std :: string const & s' dato che ci sarà comunque una copia. –
@MatthieuM: Ma assicurati di spostarlo nel membro, non copiarlo. cioè 'S (std :: string s): s (std :: move (s)) {}' –