C#和C++中的评估顺序是什么?

Bha*_*esh 5 c# c++ expression operators operator-precedence

我在C#和C++中尝试过以下内容:

int a = 5;
int b = (a++)+(++a)+(a--)+(--a);
Run Code Online (Sandbox Code Playgroud)

我试图在C#和C++中得到b的结果.但我在两者中得到了不同的答案.

我在C#中得到23,在C++中得到20.

所以,请回答我为什么会这样?这可能是什么原因?

fre*_*low 7

C#从左到右对此进行评估.在C++中,像你这样的搞笑表达会调用未定义的行为,因为你正在更改变量并再次读取它而没有插入序列点.

这意味着允许不同的编译器(或甚至具有不同优化设置的相同编译器)(并且通常)产生不同的结果(a++)+(++a)+(a--)+(--a).