gpt4 book ai didi

c++ - 编译器可以优化方法调用吗?

转载 作者:行者123 更新时间:2023-11-30 01:08:35 24 4
gpt4 key购买 nike

我有一个这样的 C++ 类:

class MyClass {
int calculate( int arg1 ) const;
void side_effect( int arg) const;
}

它是这样使用的:

{
MyClass m;
m.calculate( 100 );
m.side_effect( 100 );
}

编译器是否可以自由跳过 m.calculate( ) 调用 - 因为我不保留返回值?对于 side_effect( ) 方法,我真的希望编译器不能跳过调用 - 即使该方法被标记为 const?

编辑:我问这个问题的原因是我的 calculate( ) 函数有副作用,但是通过使用 mutable 它被标记为 常数。现在在正常情况下,我想保留返回值,整个问题都没有实际意义——但在上面说明的情况下,我只对确定副作用已被调用感兴趣(是的——我知道它不是漂亮的 ...)。阅读答案/评论我觉得你认为编译器可以推断出一个方法是否有副作用;这让我感到惊讶?

最佳答案

这取决于 m.calculate() 做什么。

如果它只是检索值然后将它们丢弃,那么实际上,您的计算机在这里没有任何用处,您完成的程序很可能甚至不会进行调用。

但是,编译器可以执行优化的程度受到函数定义的可见性等因素的限制。

const 与它无关。因此,如果 m.side_effect() 有副作用,则不能跳过。

关于c++ - 编译器可以优化方法调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42275037/

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