RVO V.S. std::move 返回值优化和std::move
RVO V.S. std::move 返回值优化和std::move
今天看到了std::move右值的使用,又想到函数返回值的时候有个临时变量的拷贝,于是就想到
为什么返回的时候不用std::move,那样不是避免了临时对象吗?想到这里我就查了一些资料,找到了
一个RVO(Return Value Optimization)返回值优化和Move的文章,感觉很好,记录在这里:
- https://www.ibm.com/developerworks/community/blogs/5894415f-be62-4bc0-81c5-3956e82276f3/entry/RVO_V_S_std_move?lang=en
- https://zhuanlan.zhihu.com/p/20451552?refer=skillxx
- http://stackoverflow.com/questions/17473753/c11-return-value-optimization-or-move
- http://www.zhihu.com/question/29511959
看了下感觉还是直接使用:
BigObject func2(int){
BigObject localObj;
return std::move(localObj);
}
//使用这种吧:
BigObject func3(int){
BigObject localObj;
return BigObject();
}//这个是毫无疑问有RVO优化的。
作者:Skillness
链接:https://zhuanlan.zhihu.com/p/20451552
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
浙公网安备 33010602011771号