Desde el siguiente código, RVO Si ha sucedido, espero ver las 2 direcciones que apuntan en la misma ubicación, sin embargo, este no es el caso (mi compilador es VC9.0 MS)¿Cuándo debería iniciarse RVO?
#include <iostream>
#include <string>
std::string foo(std::string& s)
{
std::cout << "address: " << (unsigned int)(&s) << std::endl;
return s;
}
int main()
{
std::string base = "abc";
const std::string& s = foo(base);
std::cout << "address: " << (unsigned int)(&s) << std::endl;
std::cout << s << std::endl;
return 0;
}
¿En qué condiciones debería estar sucediendo RVO?
por cierto, me estoy basando mi pregunta en el siguiente análisis: http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/
I la pregunta de OP, él está obteniendo una referencia de lo que se devuelve de la función.Normalmente, todos deberían decir "¡horror, se va a romper!" pero en este caso el hecho de que él lo declaró const extiende la vida de lo temporal al final del alcance, salvándole la caída esperada. Pero en cualquier caso, él no está usando ningún valor de retorno de todos modos debido a esa referencia. – Lightness1024