此示例是否导致未定义的行为?

时间:2011-05-26 08:43:09

标签: c++ undefined-behavior language-lawyer

  

可能重复:
  Undefined Behavior and Sequence Points

变量i被更改两次,但下一个示例是否会导致未定义的行为?

#include <iostream>
int main()
{
    int i = 5;
    std::cout << "before i=" << i << std::endl;
    ++ i %= 4;
    std::cout << "after i=" << i << std::endl;
}

我得到的输出是:

before i=5
after i=2

1 个答案:

答案 0 :(得分:7)

是的,它未定义。分配时没有序列点,%或++并且您不能在序列点内多次更改变量。

编译器可以将其评估为:

++i;
i = i % 4;

i = i % 4;
++i;

(或其他)