<分区>
Possible Duplicate:
Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)
我和我的 friend 正忙着想出我们能想到的最糟糕的 for 循环(所以不要告诉我这是糟糕的代码,因为它本该如此!)。
我的 friend 想出了这个 for 循环:
for (int i = 0; i++ & ++i % (++i % 2) ? --i : i++; i++);
看起来没问题,但由于 float 异常,即使是第一次也无法进入。 所以我的第一个想法是模除以 0。但它似乎并没有,因为如果你这样做,它运行良好:
for (int i = 0; i < 100; i++) {
i++ & ++i % (++i % 2);
}
但这不会:
for (int i = 0; i < 100; i++) {
i++ & ++i % (++i % 2) ? --i : i++;
}
但它变得陌生了。第一种情况运行良好,第二种情况不会:
for (int i = 0; i < 100; i++) {
i++ & ++i % (++i % 2) ? 0 : 1;
}
for (int i = 0; i < 100; i++) {
i++ & ++i % (++i % 2) ? 1 : 0; // 1 and 0 switched
}
所以现在我对发生的事情真的很困惑,但它又变得更奇怪了。如果你把大小写放在 中? 0 : 1
(运行良好)进入 if 语句,它再次抛出浮点异常:
for (int i = 0; i < 100; i++) {
if (i++ & ++i % (++i % 2) ? 0 : 1);
}
我完全迷失了。有人知道这里发生了什么吗?