i + ++ i的结果是什么?

时间:2010-11-02 19:32:48

标签: c++

  

可能重复:
  Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)

为什么这段代码会产生8?

#include <iostream> 
using namespace  std ;
void myFunction(int i)
{
    i = i + 2 + ++i;
    cout<<i<<endl;
}

void main () 
{
    int i = 2;
    myFunction(i);
    cin>> i;
}

我认为结果应该是7而不是8 ...我正在使用Visual Studio 2008

5 个答案:

答案 0 :(得分:18)

此表达式右侧的术语评估顺序

i = i + 2 + ++i;

未定义。即它们可以以任何顺序发生。在这种情况下,编译器选择在评估i(第一项)之前首先递增i(++ i,第三项),这将导致3 + 2 + 3。

答案 1 :(得分:13)

您正在一个语句中更改i两次,并且还会以与更改它无关的方式引用其值。这是未定义的行为,没有单一的正确答案。

答案 2 :(得分:4)

未指明的行为。它可以是任何价值。您不允许在单个序列点中多次修改变量。

答案 3 :(得分:-1)

++ i在所有其他语句之前执行,因此在行i + 2 + ++i中,结果为(i = 2)3 + 2 + 3为8。

答案 4 :(得分:-1)

首先评估“++ i”。然后“我”是3,所以最终得到3 + 2 + 3 = 8。 这是为什么你应该小心操作员的一个很好的例子!