Pregunta

En un anterior pregunta, parecía que una llanura función de retorno por valor siempre copias return su argumento en la variable se asigna de la misma.

Es esto requerido por el estándar, o puede ser optimizado la función mediante la construcción de la 'asignado a' variable incluso dentro del cuerpo de la función?

struct C { int i; double d; };

C f( int i, int d ) {
    return C(i,d); // construct _and_ copy-construct?
}

int main() {
    C c = f( 1, 2 ); 
}
¿Fue útil?

Solución

La norma permite a cualquier nivel de copia omisión aquí:

  • construir un local temporal, copia-construirlo en un valor de retorno, y el copia-construir el valor de retorno en el local de "c". o
  • construir un temporal local, y copia-constructo que en "c". o
  • construir "c" con los argumentos "i, d"

Otros consejos

La norma dice que el constructor de copia no es necesario usar - véase la sección 12.8 / 15:

  

15 Cada vez que un objeto de clase temporal   se copia usando un constructor de copia,   y este objeto y la copia tienen el   mismo cv-incondicional tipo, una   Se permite la aplicación para tratar   el original y la copia como dos   diferentes formas de referirse a la   mismo objeto y no realizan una copia en   todo, incluso si la copia de clases   constructor o destructor lado tienen   efectos.

Y mucho más en el mismo sentido.

Camino no pasa parámetros por referencia y asignar resultado a ella?

Hay una manera muy simple y bueno evitar completamente tales consideraciones - se puede considerar la devolución de un impulso :: shared_ptr al objeto creado - será prácticamente el mismo cuando se trata de la facilidad de uso, sino que su objeto será seguramente no puede copiar innecesariamente -., y será cierto también que si regresa, aunque un par de capas de llamadas de función

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top