【发布时间】:2017-02-04 09:31:15
【问题描述】:
考虑以下代码。预期输出应该是
0 1
1 2
2 3
等等。
#include<iostream>
using namespace std;
int f=0;
int B()
{
return f;
}
int A()
{
return f++;
}
int main()
{
cout<<A()<<" "<<B()<<endl;
cout<<A()<<" "<<B()<<endl;
cout<<A()<<" "<<B()<<endl;
cout<<A()<<" "<<B()<<endl;
return 0;
}
但实际输出是
0 0
1 1
2 2
等等..为什么?
如果我像这样更改代码-
int main()
{
int f=0;
cout<<f++<<" "<<f<<endl;
cout<<f++<<" "<<f<<endl;
cout<<f++<<" "<<f<<endl;
cout<<f++<<" "<<f<<endl;
return 0;
}
然后我得到正确的预期输出
为什么?
【问题讨论】:
-
所有那些
<<只是隐藏了一堆正常的函数调用。评估函数调用的参数的顺序是未定义的。因此,标准没有定义调用A()和B()的顺序。 (f++和f也是如此,只是结果不同)。