变量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
答案 0 :(得分:7)
是的,它未定义。分配时没有序列点,%或++并且您不能在序列点内多次更改变量。
编译器可以将其评估为:
++i;
i = i % 4;
或
i = i % 4;
++i;
(或其他)