What operator precedence takes place in the following C++ statement?
int lower = height[height[l] < height[r] ? l++ : r--];
Assume, height=[0,1,0,2,1,0,1,3,2,1,2,1]
and int l = 0, r = height.size()-1;
.
As per my understanding, height[l] < height[r]?
would be evaluated first, followed by l++
or r--
as the case might be (l++
in this case). Then the value of height[updated l]
should be assigned to lower
. Thus lower
should be 1
; but the output says it is 0
. How? What would be the correct order of the evaluation of the statements then?
The l++
uses the post-increment operator. The value of l is increased after the value of the expression is evaluated. So, when l is 0, the value of l++
is 0 and not 1, even though the variable l will have the value 1 afterwards.
Using ++l
would show a different behaviour.
The following statement in the question is incorrect:
Then the value of height[updated l] should be assigned to lower
The updated value of l is not used as the array index, but the value of the expression l++
, which is the value of l before it is increased.