【发布时间】:2017-12-15 10:15:09
【问题描述】:
int x=12;
int y=7;
int z=19;
int sum;
sum = ++x >= y * 2 || y % 2 && z++ % 2;
我对运算符优先级有点困惑?
编译器将在上述代码中读取的第一个条件是什么?
它是否会首先评估y % 2 && z++ % 2,因为&& 优先于||,或者如果最左边的++x >= y * 2 为真,编译器是否仍会从左到右并短路?即编译器会按照以下方式读取代码吗?
sum = (++x >= y * 2 || y % 2 )&& z++ % 2;
【问题讨论】:
-
如有疑问,您只需添加
(和)即可获得所需的订单。如此复杂的代码永远不会有任何实际用途。 -
@BoPersson:很有趣,但我坐在围栏的另一边,而且教条主义。学习您的优先表不会花费很长时间,并且可以使代码更具可读性。
-
@Bathsheba - 是的,知道
+和*的顺序很好,但是当它是&& z++ % 2时就没有多大用处了。 -
@Stannis - 我认为这仅对考试有用。如果你在我的代码审查中尝试这个,你会得到最后的警告。再一次,你会寻找一份新工作。 :-)
-
@zerkms 关联性只有在两个具有相同优先级的运算符彼此相邻时才会发挥作用。它不适用于此表达式的任何地方。
标签: c operator-precedence