c ++: const Referenz auf einen rWert

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

Was sind die Unterschiede zwischen doSomething und doSomething2 und welcher ist vorzuziehen?
Ist es sicher, einen const-Verweis auf einen zurückgegebenen Wert in doSomething zu verwenden?
Erstellt doSomething2 eine Kopie des zurückgegebenen Werts, darf der Compiler hier die Wertoptimierung durchführen?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage