В случае, если ваша проблема заключается в разнице результатов, это связано с порядком приоритета операторов, которые вы используете.Проверьте здесь для деталей.В соответствии с этим порядком приоритета:
true ? false : true == true ? false : true
такой же, как этот:
true ? false : ((true == true) ? false : true)
, поэтому он всегда будет иметь значение false .Вы можете поставить что-нибудь после двоеточия, так как оно никогда не вычисляется в любом случае (если я правильно помню, и троичный оператор использует ленивую оценку);причина этого в том, что
true ? A : B
всегда оценивается как A.
С другой стороны,
(true ? false : true) == (true ? false : true)
будет иметь обе стороны сравненияоператор == оценивать в ложь, поэтому
false == false
, что является true оператором.
Таким образом, здесь разница в том порядке, в котором оцениваются операторы, чтоопределяется используемыми вами круглыми скобками и, если есть неопределенность, которая не разрешается скобками, порядком приоритета используемых операторов.
В общем случае, троичный оператор "?: "работает следующим образом
A ? B : C
Если A истинно, вычислите значение B, в противном случае - значение C. A должно быть логическим выражением, B и C могут быть любыми значениями;вам придется иметь дело с несоответствиями типов, если вы хотите присвоить оцененное значение переменной, и они бывают разных типов.