c ++: referencia constante a un rvalue

//old school '98 c++, no C++0x stuff
std::string getPath();

void doSomething()
{
    const std::string &path = getPath(); //const reference to an rvalue
    ... // doSomething with path
}

void doSomething2()
{
    const std::string path = getPath(); //regular variable
    ... // doSomething with path
}

¿Cuáles son las diferencias entre doSomething y doSomething2 y cuál es preferible?
¿Es seguro usar la referencia de const al valor devuelto en doSomething?
¿DoSomething2 crea una copia de rvalue devuelto, se permite que el compilador realice la optimización de rvalue aquí?

Respuestas a la pregunta(3)

Su respuesta a la pregunta