C++ “是什么意思?”;表达式的求值顺序是从左到右。”;

C++ “是什么意思?”;表达式的求值顺序是从左到右。”;,c++,undefined-behavior,C++,Undefined Behavior,编辑以澄清:我不是问排序是如何工作的。该问题并非其标记为重复的问题的重复。我已经知道x++*++x是UB。我问的是“表达式的求值顺序是从左到右”这句话的含义 这一行摘自比亚恩·斯特劳斯图普的《C++之旅》,第二版 我本以为这意味着像intx=2;int y=x++*++x定义良好。按照我的理解,从左到右求值意味着首先求值x++(值2),++x其次求值(值4),y的最终值是8 但是clang警告说,对“x”进行了多次未排序的修改,所以我认为我对Stroustrup的引用的理解肯定是错误的 有人能解

编辑以澄清:我不是问排序是如何工作的。该问题并非其标记为重复的问题的重复。我已经知道
x++*++x
是UB。我问的是“表达式的求值顺序是从左到右”这句话的含义

这一行摘自比亚恩·斯特劳斯图普的《C++之旅》,第二版

我本以为这意味着像
intx=2;int y=x++*++x
定义良好。按照我的理解,从左到右求值意味着首先求值
x++
(值2),
++x
其次求值(值4),
y
的最终值是
8

但是clang警告说,
对“x”进行了多次未排序的修改,所以我认为我对Stroustrup的引用的理解肯定是错误的

有人能解释一下他的真正意思吗?

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


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

您没有在示例代码中调用函数。@NathanOliver,我已编辑以解释为什么我不认为这个问题是重复的。请重新打开。你想知道的都可以在这里找到:反例:在
x+y/z
中,首先计算
y/z
,然后计算加法。因为引用没有提到操作顺序,我不认为这是什么意思。