运算符优先级 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;
有人可以解释一下发生在以下 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;