Рассмотрим эти две функции:
// 1. Multiple returns of the same named object
string f() {
string s;
if (something())
return s.assign(get_value1());
else
return s.assign(get_value2());
}
и
// 2. Multiple returns, all of unnamed objects
string g() {
if (something())
return get_value1();
else
return get_value2();
}
Как каждая из этих функций будет вести себя с точки зрения RVO, конечно, зависит от компилятора. Правильно ли, однако, предположить, что RVO для обоих из них является общим?
p.s. (См. Ответы) Функция # 1 должна была быть следующей:
string f() {
string s;
if (something())
return s;
s.assign(get_value());
return s;
}