- 返回值优化(Return Value Optimization,简称RVO),是这么一种优化机制:当函数需要返回一个对象的时候,如果自己创建一个临时对象用户返回,那么这个临时对象会消耗一个构造函数(Constructor)的调用、一个复制构造函数的调用(Copy Constructor)以及一个析构函数(Destructor)的调用的代价。而如果稍微做一点优化,就可以将成本降低到一个构造函数的代价,也就是将内容直接构造到左值中,中间不生成临时变量。
- NRVO,即Named Return Value Optimization,简单的来说是这样的一种情况:
class BigObject
{
};
BigObject foo()
{
return BigObject(); // RVO
}
BigObject bar()
{
BigObject localObj;
return localObj; // NRVO
}
关于RVO和std::move区别:https://www.ibm.com/developerworks/community/blogs/5894415f-be62-4bc0-81c5-3956e82276f3/entry/RVO_V_S_std_move?lang=en