让我们考虑这两个函数:
// 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 都很常见?
ps(见答案)功能#1旨在如下:
string f() {
string s;
if (something())
return s;
s.assign(get_value());
return s;
}