可能重复:
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
答案 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。 这是为什么你应该小心操作员的一个很好的例子!