gpt4 book ai didi

c++ - 从嵌套范围返回值优化

转载 作者:行者123 更新时间:2023-11-28 06:34:20 25 4
gpt4 key购买 nike

在下面的例子中会出现返回值优化吗? (可能是依赖于编译器的问题。在这种情况下,我想我想知道“典型的”现代编译器,如最近的 clang/gcc。)

Blah factory() {
return Blah();
}

void func() {
Blah blah;
if (condition) {
blah = factory();
blah.DoSomething();
} else {
blah = factory();
blah.DoSomethingElse();
}
blah.DoOneMoreThing();
}

我知道我并没有在调用工厂函数的同一行中显式构造对象,但是足够聪明的编译器肯定可以优化上面示例中的拷贝(因为实例 blah在设置为 factory() 之前未被触及)。

如果 RVO 确实不会发生,是否有一些方法可以在不更改 factory 的情况下避免复制?

最佳答案

在你的程序中不会有任何返回值优化,因为 Blah blah; 调用可能有副作用(例如打印消息或锁定互斥量)的默认构造函数,并且C++ 编译器不允许对其进行优化。一旦 blah 被默认构造,它就不能在下面的赋值中再次构造,但返回值优化将需要构造。

但是,如果您的构造函数和赋值运算符定义可用于编译器,那么它可能会优化生成的代码,使其最终可能与复制构造函数的最终结果相同。但这并不能保证。

关于c++ - 从嵌套范围返回值优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26984118/

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