编译器可以优化远离方法调用吗?

use*_*005 1 c++

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

class MyClass {
    int calculate( int arg1 ) const;
    void side_effect( int arg) const;
}
Run Code Online (Sandbox Code Playgroud)

使用方式如下:

{
    MyClass m;
    m.calculate( 100 );
    m.side_effect( 100 );
}
Run Code Online (Sandbox Code Playgroud)

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

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

Lig*_*ica 5

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

如果它只检索值然后扔掉它们,那么,确实,你的计算机没有什么用处,你完成的程序可能甚至不能打电话.

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

const有什么用它做.所以,如果m.side_effect()有副作用,就不能跳过.