我不知道是否有人能为我解释这段代码?
unsigned int x = 0;
(x ^= x ) || x++ || ++x || x++;
printf("%d\n", x);
Run Code Online (Sandbox Code Playgroud)
当我使用gcc 4.2在我的计算机上编译它时,输出为2.
最初我想也许这个行为是未指定的,但后来我想|| 将优先于其他运营商,所以答案不应该是3吗?由于有三个"++".
谁能解释一下?谢谢
(x ^= x) 被评估,它产生0,因此:(x++)被评估,它产生0,因此:(++x)被评估,它产生2,因此它停止这一切都归结为一条规则:||如果左侧是假的,则仅评估其右侧.
问题是||运营商正在短路.一旦找到真值,就不再需要检查剩余的||陈述; 答案已经知道了.
(x ^= x)求值为0.
x++计算结果为0,然后递增x为1.
++x计算结果为2 - 为真.
最终或声明不需要计算.它"短路"并立即返回true.