“表达式的计算顺序从左到右”是什么意思。

时间:2019-04-23 21:22:21

标签: c++ undefined-behavior

编辑以澄清:我不是在问测序的工作原理。此问题不是被标记为重复的问题的重复。我已经知道x++ * ++x是UB。我要问的是“表达式的计算顺序从左到右”的意思。

此行摘自Bjarne Stroustrup的“ C之游”第二版。

我希望这意味着int x=2;int y=x++ * ++x之类的代码片段是定义明确的。以我的理解,从左到右评估意味着x++首先被评估(值2),++x被第二次评估(值4),而y的最终值是8

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

谁能解释他的真正意思?

1 个答案:

答案 0 :(得分:0)

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

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