运算符优先级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++
使用后递增运算符。计算表达式的值后,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;
相关文章:
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 按对象的特定方法按升序排列的C++优先级队列
- 使用2个键的cpp-stl::优先级队列排序不正确
- 为什么我需要C++中不同的排序格式来对这个USACO代码上的数组和优先级队列进行排序
- 打印优先级队列
- 带自定义比较器的最小优先级队列
- 优先级队列自定义比较器
- 排序数组优先级队列
- 更改运行时优先级队列的排序功能
- 优先级队列构造函数的工作
- 实现优先级队列
- 优先级队列功能比较
- C++ 带有函数指针的运算符优先级
- 将更高的优先级设置为 boost::asio 线程处理进程
- 在C++中打印对的优先级队列的所有值时出现问题
- <<运算符优先级与字符串比较
- SFINAE 模板专用化优先级
- 赋予全局变量而不是局部变量优先级的函数 - (异常行为)
- 使用堆的优先级队列,具有相同键的值不遵循 FIFO(先进先出)
- 为什么某些 STL 容器(堆栈、队列、优先级队列)不支持迭代器?