假设我有一个函数:
typedef std::vector<int> VecType;
VecType randomVector();
int processing()
{
VecType v = randomVector();
return std::accumulate(v.begin(), v.end(), 0);
}
C++ 0x是否专门说将从randomVector的返回值中避免虚假拷贝?还是编译器需要实现RVO?在我看来,应将
randomVector()
值视为一个右值,并因此应调用v的move构造函数,但我不能完全确定这是正确的。 最佳答案
规则如下
就像您说的那样,由于
13.3.3.2/3
中的规则,临时变量是一个右值,因此选择了移动构造函数,该规则表示右值引用比左值引用更好地绑定(bind)到右值。在决定使用move还是copy构造函数时,为此,重载分辨率将首选move构造函数。允许编译器执行RVO的规则写在
12.8/15
上。关于c++ - 返回值将通过c++ 0x中的右值引用传递吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1316924/