小编Dan*_*sig的帖子

C++是否允许优化编译器忽略for-condition的副作用?

在调试一些遗留代码时,我偶然发现令人惊讶的(对我而言)编译器行为.现在我想知道C++规范中的任何子句是否允许以下​​优化,其中函数调用对for-condition的副作用被忽略:

void bar() 
{
   extern int upper_bound;
   upper_bound--;
}

void foo()
{
   extern int upper_bound; // from some other translation unit, initially ~ 10
   for (int i = 0; i < upper_bound; ) {
      bar();
   }
}
Run Code Online (Sandbox Code Playgroud)

在得到的解析中,存在一个控制路径,其中upper_bound保存在寄存器中,并且upper_boundin 的递减bar()永远不会生效.

我的编译器是Microsoft Visual C++ 11.00.60610.1.

老实说,我在N3242的 6.5.3和6.5.1中没有看到太多的摆动空间,但我想确定我没有错过任何明显的东西.

c++ for-loop specifications extern language-lawyer

22
推荐指数
2
解决办法
723
查看次数

标签 统计

c++ ×1

extern ×1

for-loop ×1

language-lawyer ×1

specifications ×1