0
Multiple Ternary Operator Usage Question
Had an interesting encounter with a question with more than one ternary operator: a=0; cout << (a = 0 ? 1 : 2 ? 3 : 4); return 0; // outputs 3 a = 0 evaluates true so we get 1. After this, how do we get 3? How is "1 : 2" a mathematical expression that can be evaluated by the "?" operator? Are we treating the 1 as a boolean? But then 2 wouldn't even be evaluated... What other concept is at play here?
7 Answers
+ 3
Correct, all non zero integers evaluate to true.
So in first ternary take 2 (the false way), in second ternary take 3 (the true way)
+ 3
Bilbo Baggins What's the value of "a" after ternary conditinal and why?
+ 2
Wait!
a=0 evaluates 0 (the value of a) because you are assigning (=), not comparing (==)
+ 2
So if we assigned value 0 to a, the "a = 0" is evaluate to false?
But how do we get to the output of 3?
Do we treat this situation like how we would for the condition of an "if" statement? That is, all integer (negative and positive), except zero, evaluates to true?
+ 2
thanks a lot
+ 2
r̶e̶m̶ Kevin â
cout << (a = 0 ? 1 : 2 ? 3 : 4);
After the the a=0 step, we choose the one on the right ( 2 instead of 1), which is true by nature because all non-zero integers are true. Then we choose the one on the left (3) after that.
For exercise: try figuring out why the expression (0 ? 100 : 0 ? 0 : 400 ? 0 : 500 ? 0 : 700) would evaluate to 700
+ 2
Kevin â
thanks for asking that đ
The false way in first ternary operation is not taken because a=0 is false as I said before: assignment is less prioritary than ternary operator!
The false way in first ternary operation is taken just because 0 is false.
The result of the two ternary operations is finally assigned to 'a', which will take 3 as new value.