【问题标题】:What is meant by "The order of evaluation of expressions is left to right."“表达式的计算顺序是从左到右”是什么意思。
【发布时间】:2019-09-13 03:12:48
【问题描述】:

编辑澄清:我不是在问测序是如何工作的。此问题与它被标记为重复的问题不是重复的。我已经知道x++ * ++x 是UB。我在问“表达式的评估顺序是从左到右”这句话的含义。

这句话摘自 Bjarne Stroustrup 的“A Tour of C++”,第 2 版。

我原以为这意味着像int x=2;int y=x++ * ++x 这样的sn-ps 是明确定义的。在我的理解中,从左到右评估意味着首先评估x++(值2),其次评估++x(值4),y 的最终值是8

但是 clang 警告 multiple unsequenced modifications to 'x',所以我认为我对 Stroustrup 引用的含义的理解一定是错误的。

谁能解释他的实际意思?

【问题讨论】:

  • 您没有在示例代码中调用函数。
  • @NathanOliver ,我已经编辑解释了为什么我不觉得这个问题是重复的。
  • 重新打开。你想知道的都可以在这里找到:en.cppreference.com/w/cpp/language/eval_order

标签: c++ undefined-behavior


【解决方案1】:

“表达式的顺序是从左到右”表示int z = a / b * c;首先将a除以b,然后然后将结果与c相乘。这将产生与int z = a * c / b; 不同的结果,因为整数除法会丢失任何分数。

在“真实世界”数学中,这两个表达式是等价的;在整数计算中它们不是。

【讨论】:

  • 反例:在x+y/z 中,y/z 先求值,再求加。由于引用没有提到操作顺序,我认为这不是这个意思。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-20
  • 1970-01-01
  • 2012-08-11
  • 1970-01-01
  • 1970-01-01
  • 2013-10-02
相关资源
最近更新 更多