RVO和NRVO

  • 返回值优化(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

原文地址:https://www.cnblogs.com/ggzone/p/10121259.html