实际上,为什么不同的编译器会计算int x = ++ i + ++ i;的不同值??

问题描述 投票:1回答:2

考虑此代码:

int i = 1;
int x = ++i + ++i;

我们对编译器可能对此代码所做的猜测(假设它已编译。)>

  1. ++ i都返回2,导致x = 4。
  2. 一个++ i返回2,另一个返回3,导致x = 5。
  3. ++ i都返回3,导致x = 6。
  4. 对我来说,第二个似乎很有可能。两个++运算符之一以i = 1执行,i递增,并返回结果2。然后使用i = 2执行第二个++运算符,i递增,并返回结果3。然后将2和3加在一起得到5。

但是,我在Visual Studio中运行了这段代码,结果是6。我试图更好地理解编译器,我想知道是什么可能导致6的结果。我唯一的猜测是代码可以通过一些“内置”并发执行。调用了两个++运算符,每个运算符在另一个返回之前先加i,然后它们都返回3。这与我对调用堆栈的理解相矛盾,因此需要解释掉。

我的问题是:C ++编译器可以做什么(导致)结果为4或结果为6?

考虑此代码:int i = 1; int x = ++ i + ++ i;假设编译器可以编译该代码,我们对此可能会有一些猜测。两者++ i都返回2,导致x = 4。一个++ i返回2,并且...

c++ undefined-behavior
2个回答
0
投票

这是undefined behavior,因为您要在一个表达式中两次修改该变量,并且是多合一。


-1
投票

++的优先级高于+。

© www.soinside.com 2019 - 2024. All rights reserved.