Antes de C++ 11, si tenía una función que operaba en objetos grandes, mi instinto sería escribir funciones con este tipo de prototipo.En C++ 11, ¿aún es necesario pasar una referencia a un objeto que aceptará la salida de una función?
void f(A &return_value, A const ¶meter_value);
(Aquí, valor_devuelto es sólo un objeto en blanco que recibirá la salida de la función. A es sólo algunas clase que es grande y caro para copiar.)
En C++ 11, teniendo ventaja de la semántica movimiento, la recomendación por defecto (como yo lo entiendo) es el más sencillo:
A f(A const ¶meter_value);
¿hay alguna todavía la necesidad de hacerlo de la manera antigua, pasando de un objeto de mantener el valor de retorno?
Pensé que la recomendación predeterminada siempre ha sido "hacer lo que es conveniente y salir de su camino si lo considera necesario" ... – Mehrdad
Nunca hubo tal necesidad, consulte http://cpp-next.com/ archive/2009/08/want-speed-pass-by-value/ –
@ K-ballo: Puede haber una necesidad previa al estándar (aunque las personas tienden a no reconocerlo, C++ existió casi 20 años antes de que se estandarizara) . Aunque tal vez no, estaba empezando a aprender C++ sobre el momento de la estandarización (y ni siquiera sabía que estaba sucediendo en ese momento), ¿existía tal cosa como elisión de copia antes del estándar? ¿Fue utilizado por compiladores populares? –