运算符优先级 C++

Operator precedence C++

有人可以解释一下发生在以下 C++ 语句中的运算符优先级吗?

int lower = height[height[l] < height[r] ? l++ : r--];

假设,height=[0,1,0,2,1,0,1,3,2,1,2,1]int l = 0, r = height.size()-1;。 根据我的理解, height[l] < height[r]? 将首先被评估,然后是 l++r-- 视情况而定(在这种情况下为 l++ )。那么height[updated l]的值应该赋值给lower。因此 lower 应该是 1;但输出显示它是 0。如何?那么,语句评估的正确顺序是什么?

l++ 使用 post-increment 运算符。在计算表达式的值后,l 的值会增加。因此,当 l 为 0 时,l++ 的值为 0 而不是 1,即使变量 l 之后的值为 1。

使用 ++l 会显示不同的行为。

题中下列说法错误的是:

Then the value of height[updated l] should be assigned to lower

l更新后的值不作为数组索引,而是表达式l++的值,即l增加前的值

l++是post自增运算符,表示运算完成后自增。因此输出 0,其他一切都是正确的。

代码等于:

int lower = height[height[l] < height[r] ? l : r];
(height[l] < height[r]) ? l+=1 : r-=1;