其他分享
首页 > 其他分享> > C优化器删除具有副作用的对象

C优化器删除具有副作用的对象

作者:互联网

这当前不是问题,但我担心代码是否被移植或我们更改编译器.

我有一个块的代码

{ 
   MyClass myObj;
   // copy some other variables but never touch myObj
   .
   .
} // expect destructor to be called on myObj

其中myObj从未在块代码中使用,但构造函数有副作用,我依赖于MyClass的析构函数代码在块结束时执行.这在我当前的arm编译器上按预期工作,并启用了一些优化.

我的问题是,是否有任何我需要做的事情,比如声明一些易失性或设置一些公共属性以防止优化器将myObj检测为未使用的变量或其他一些.

这不是C 11编译器.正如我所说,这不是一个问题,但我不想为其他人留下一个奇怪的未来错误.

解决方法:

除了明确定义的情况(如RVO (return value optimization))之外,不允许优化更改程序的可观察行为.优化必须遵循所谓的“as-if” rule.

标签:raii,side-effects,c,optimization
来源: https://codeday.me/bug/20190829/1763519.html