Что здесь странного?Первая часть интерпретируется как:
(11 + (k != 7)) ? 1 : 11
, а вторая интерпретируется как
11 + ((k !=7) ? 1 :11)
Первая вызвана правилами приоритета (двоичная арифметика имеет более высокий приоритет, чем троичный оператор)а вторая обходит правила приоритета, группируя выражение с круглыми скобками.
Ваше редактирование запрашивает причины, и обычно о них можно только догадываться, если кто-то из членов комитета С, присутствовавший в то время, не приходит на помощь,Я полагаю, что гораздо сложнее использовать сложное выражение и запрашивать его значение истинности, чем использовать троичный оператор для определения значения выражения в арифметике.Нечто подобное приходит на ум:
return (froble() + 3) == 0 ? 23 : 5; // parens for sanity but works without
, если это будет интерпретировано как return (froble() + 3) == 5;
, я был бы по-настоящему шокирован.