运算符优先级C ++

时间:2017-01-18 00:50:28

标签: c++ operator-precedence

有人可以解释一下在以下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。怎么样?那么这些陈述的评估顺序是什么?

3 个答案:

答案 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;