Если бы он оценивался слева направо, он выглядел бы так:
z = ((a == b ? a : b) ? c : d);
То есть он использовал бы результат первого условия (a
или b
) в качествебулево условие второго условного.Это не имеет особого смысла: это все равно что сказать:
int z, tmp;
/* first conditional */
if(a == b) tmp = a;
else tmp = b;
/* second conditional */
if(tmp) z = c;
else z = d;
Хотя, возможно, однажды вы захотите сделать именно это, гораздо более вероятно, что каждый следующий ?:
призван добавитьусловия, такие как if
/ else if
/ else if
/ else
, что дает право-ассоциативное связывание:
int z;
/* first conditional */
if(a == b) z = a;
else /* second conditional */ if(b) z = c;
else z = d;