有人可以解释一下在以下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
。怎么样?那么这些陈述的评估顺序是什么?
答案 0 :(得分:3)
l++
使用后增量运算符。在计算表达式的值之后,l的值增加。因此,当l为0时,l++
的值为0而不是1,即使变量l之后的值为1。
使用++l
会显示不同的行为。
问题中的以下陈述不正确:
然后应将height [updated l]的值分配给较低的
l的更新值不用作数组索引,而是用作表达式l++
的值,它是l之前增加的值。
答案 1 :(得分:1)
l++
是后增量运算符,这意味着它将在操作完成后递增。因此输出0
,其他一切都是正确的。
答案 2 :(得分:-1)
代码等于:
&#xA;&#xA; int lower = height [height [l]&lt;身高[r]? l:r];&#xA;(height [l]&lt; height [r])? l + = 1:r- = 1;&#xA;
&#xA;