运算符优先级C++

Operator precedence C++

本文关键字:C++ 优先级 运算符      更新时间:2023-10-16

有人可以解释一下以下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++使用后递增运算符。计算表达式的值后,l 的值将增加。因此,当 l 为 0 时,l++的值为 0 而不是 1,即使变量 l 之后的值为 1。

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

问题中的以下陈述不正确:

那么高度[更新的l]的值应该分配给较低的

更新后的 l

值不用作数组索引,而是表达式的值 l++ ,即 l 在增加之前的值。

l++是后递增运算符,这意味着它将在操作完成后递增。因此输出0,其他一切都是正确的。

代码等于:

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