c ++: referência const a um valor

//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
}

Quais são as diferenças entre doSomething e doSomething2 e qual delas é preferível?
É seguro usar a referência const para retornar rvalue em doSomething?
O doSomething2 cria uma cópia do rvalor retornado, o compilador tem permissão para fazer a otimização do rvalue aqui?

questionAnswers(3)

yourAnswerToTheQuestion