意外的三元赋值

Unexpected Ternary Assignation

int var = (1 == 1) ? (5) : (10);

这输出 5,这是正确的。

int var = 100 + (1 == 1) ? (5) : (10);

这再次输出 5。为什么?


我知道我可以通过在整个三元语句周围添加大括号来解决问题,但这并不能解释加法会发生什么以及为什么它首先会这样。

在C中每个非零值都是“true”,这里100 + (1 == 1)的值是101,也是“true”,所以选择(5)。由于 ?: 的优先级很低,括号应该是 ((1==1) ? 5 : 10) 才能达到您想要的效果。

原因是运算符优先级规则以及任何非零值测试为真。

100 + (1 == 1) ? (5) : (10) 等同于 (100 + (1 == 1)) ? (5) : (10)(101 != 0) ? (5) : (10).

运算符 ?: 的优先级低于加法。