0

可能重复:
未定义的行为和序列点

变量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
4

1 回答 1

7

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

编译器可以将其评估为:

++i;
i = i % 4;

或者

i = i % 4;
++i;

(或者是其他东西)

于 2011-05-26T08:46:03.627 回答