编辑以澄清:我不是在问测序的工作原理。此问题不是被标记为重复的问题的重复。我已经知道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的报价含义的理解一定是错误的。
谁能解释他的真正意思?
答案 0 :(得分:0)
“表达式的顺序从左到右”表示int z = a / b * c;
首先 将a除以b,然后然后将结果与c相乘。这将与int z = a * c / b;
有不同的结果,因为整数除法将丢失任何分数。
在“现实世界”数学中,这两个表达式是等效的;在整数计算中不是。