不从运算符的优先级和结合性入手的,都是蒙。<的优先级高于三目运算符,而三目运算符又是右结合的,a < b ? a : c < d ? a:d 的结合顺序是
(a < b) ? a : ((c < d) ? a : d)。 按你的说法,从左到右结合,那就变成:((a < b) ? a : c)) < d ? a : d 那么下面这个例子的结果应该是2,实际上是3
- int a = 3, b = 4, c = 6, d = 2;
- printf("%d\n",a < b ? a : c < d ? a:d );
复制代码 |