当没有为类定义复制构造函数时,是否会发生RVO优化?

时间:2014-02-17 09:02:26

标签: c++ rvo

假设我有这段代码:

class Base {
public:
    void f() {}
private:
    int n;
};

Base foo()
{
    Base b;

    // processing

    return b;
}

Base没有定义复制构造函数,并且查看其成员,编译器将不会合成一个 是否对此代码应用了命名返回值(NRV)优化?编译器应用NRV时的确切规则是什么?

1 个答案:

答案 0 :(得分:1)

首先,没有确切的规则,因为NRVO不是标准的明确部分,而是标准的其他部分允许的。编译器永远不需要使用NRVO,并且不同的编译器将被禁止使用不同构造的NRVO。

在您的情况下,没有什么明显的禁止使用NRVO。没有显式的析构函数或复制构造函数,并且返回的变量在任何条件或循环块之外声明。这取决于// processing区域内的情况。