C ++和C#中的前缀运算符差异

Prefix operator difference in C++ and C#

本问题已经有最佳答案,请猛点这里访问。

让我们来看看这段代码:

1
2
int a = 1;
int b = ++a + ++a;

在C++(VS 2010)中,结果是:B=6。但在c中,结果是:b=5

发生什么事了?为什么结果不同?


它是C++中的EDOCX1×0。您试图修改一次以上的值,而不使用EDCOX1×1(每C+98/03标准)。

关于C++ 11< Buff行情> < P>操作数的值计算运算符在运算符结果的值计算之前排序。如果标量上的副作用对象相对于同一个标量对象或值计算的另一个副作用未排序使用同一个标量对象的值,该行为是未定义的。

实例:

1
2
i = v[i++]; // the behavior is undefined
i = i++ + 1; // the behavior is undefined


在C++中,EDCOX1×2是未定义的行为,因此可以期待任何结果。


C和C++是不同的语言,具有不同的语义。

C决定先执行一个+A,然后执行另一个+A,最后添加这两个表达式,因此结果是5。

在C++中,你有未定义的行为。结果可能是2,3,4,5,6,34500或任何其他。另一个可能的结果是马修·沃森把冰箱里所有的啤酒都喝光了。事实上,任何事情都可能发生。

一般来说,期望两种不同语言有相同的行为是没有意义的。每个都遵循自己的规则。

注意:在C、C++、Java和C语言中,请参阅此问题前和后增量运算符行为,以进行进一步的跨语言讨论。