rlb*_*ond 6 c++ return-value rvalue-reference return-value-optimization c++11
假设我有一个功能:
typedef std::vector<int> VecType;
VecType randomVector();
int processing()
{
VecType v = randomVector();
return std::accumulate(v.begin(), v.end(), 0);
}
Run Code Online (Sandbox Code Playgroud)
C++ 0x是否明确表示将从randomVector的返回值中避免虚假副本?或者编译器是否需要实现RVO?在我看来,值randomVector()应该被视为一个右值,因此应该调用v的移动构造函数,但我不完全确定这是真的.
规则如下
就像你说的那样,临时是一个rvalue,因此选择了移动构造函数,因为有一个规则13.3.3.2/3,它表示一个rvalue引用比一个左值引用更好地绑定一个rvalue.在决定是使用移动还是复制构造函数时,重载解析将因此更喜欢移动构造函数.
允许编译器执行RVO的规则是写入的12.8/15.
| 归档时间: |
|
| 查看次数: |
1017 次 |
| 最近记录: |