Digamos que tengo una función:¿Pasarán los valores de retorno por la referencia rvalue en C++ 0x?
typedef std::vector<int> VecType;
VecType randomVector();
int processing()
{
VecType v = randomVector();
return std::accumulate(v.begin(), v.end(), 0);
}
¿El C++ 0x dice específicamente la copia espuria se desvió desde el valor de retorno de randomVector? ¿O un compilador tendría que implementar el RVO? Me parece que el valor randomVector()
debe tratarse como un valor r, y así debe llamarse al constructor de movimientos de v, pero no estoy completamente seguro de que esto sea cierto.
No es una buena pregunta, en mi humilde opinión. El estándar no puede indicar de manera útil lo que PUEDE hacer una implementación, solo lo que DEBE hacer. –
En realidad, en el ejemplo que le ha dado a Return Value Optimization, la mayoría de los compiladores lo realizan ... Por lo tanto, es efectivo sin valor r. También rvalue es más importante para pasar argumentos a las funciones. – Artyom
El título de la pregunta es un poco engañoso. Su función devuelve un valor r y no una referencia. Pero una referencia rvalue puede vincularse a ella, que es lo que sucede en caso de que la elisión de copia no se pueda realizar por algún motivo y el tipo tenga un move-constructor (El parámetro move-constructor es una referencia rvalue) – sellibitze