我有一个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
它被标记为const
。现在,在正常情况下,我想坚持返回值,整个问题都没有实际意义 - 但在上面的例子中,我只关心确定副作用已被调用(是的 - 我知道它不是漂亮 ...)。阅读答案/评论我感觉你认为编译器可以推断出一种方法是否有副作用;这令我感到惊讶?
结果必须是 - 如果函数被调用。如果它没有效果,你怎么能说出不同? –