Duplicar posible:
Is pass-by-value a reasonable default in C++11?¿Cuándo debería elegir copiar elisión sobre pasar el argumento por const reference?
estoy leyendo Want Speed? Pass by Value. por Dave Abrahams sobre la elisión de copia y RVO. Y me pregunto por qué necesitamos la elisión de copia.
Se me ha dicho demasiadas veces que debe pasar los argumentos de la función por referencia para evitar copiar (casi todos los libros en C++ que leí me contaron sobre esto).
Supongamos que tenemos dos funciones:
int f1(const string &s);
int f2(string s);
Si el argumento actual es un valor de lado derecho, la copia se puede evitar en ambas funciones. Pero si el argumento real es un valor l, solo se evitará copiar en f1, no en f2. Entonces, ¿por qué necesitamos esta característica?
Una nota: este último caso a menudo ocurre en los constructores. Dada 'struct S {S (...): s (s) {} std :: string s; }; ', entonces es mejor usar' std :: string s' en lugar de '...' en lugar de 'std :: string const & s' ya que habrá una copia de todos modos. –
@MatthieuM: Pero asegúrese de moverlo al miembro, no copiarlo. es decir 'S (std :: string s): s (std :: mover (s)) {}' –