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

Moh*_*oud 3 c++

可能重复:
任何人都可以解释这些未定义的行为(i = i ++ + ++ i,i = i ++等...)

为什么这段代码会产生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;
}
Run Code Online (Sandbox Code Playgroud)

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

Dij*_*tra 18

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

i = i + 2 + ++i;
Run Code Online (Sandbox Code Playgroud)

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

  • 实际上,整个行为是未定义的,并且编译器在将表达式计算为42时符合标准. (8认同)
  • 未定义的行为很棒(对于编译器开发人员):) (3认同)

Dav*_*ley 13

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

  • 或者你可以说有无数的正确答案,但没有*错误的答案.;) (3认同)