gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:05:27 25 4
gpt4 key购买 nike

假设我有这段代码:

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

Base foo()
{
Base b;

// processing

return b;
}

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

最佳答案

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

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

关于c++ - 当没有为类定义复制构造函数时,是否会发生 RVO 优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21824689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com