为什么我从这些代码的不同编译器获得不同的输出?

时间:2014-09-28 04:36:01

标签: c++

代码很简单:

int Change(int& a)
{
   a = 4;
  return a;
}

int main()
{
  int a = 10;
  cout << Change(a) << a;
}

在C-Free中:输出:4 4

在VS2008中:输出:4 10

为什么呢?据我所知,我认为4 4是对的。

1 个答案:

答案 0 :(得分:0)

简单地说,没有规则保证“4 4”是正确的。同样适用于“4 10”。

正如其他人在评论中提到的那样,你有一个未定义行为的例子。即使这是定义的行为,这样的代码也很难理解。所以我建议做

cout << Change(a);
cout << a;

int b = a;
cout << Change(a);
cout << b;

无论你真正想做什么。