【发布时间】:2012-11-09 17:00:02
【问题描述】:
#include<iostream>
using namespace std;
int main()
{
int i=2;
cout<<++i<<" "<<++i;
return 0;
}
为什么程序的输出是'4 4'而不是'3 4'?
【问题讨论】:
标签: pre-increment
#include<iostream>
using namespace std;
int main()
{
int i=2;
cout<<++i<<" "<<++i;
return 0;
}
为什么程序的输出是'4 4'而不是'3 4'?
【问题讨论】:
标签: pre-increment
因为这两个增量都发生在输出行之前。实际写入屏幕会延迟到整行运行完毕,但到那时 i 的引用已经更新了它的值。
如果你将你的 cout 线分成两个离散的输出,事情会像你期望的那样评估。
【讨论】:
您对同一个变量(两个增量)有两个副作用,它们之间没有序列点。所以它们可能以任何顺序发生,甚至可能交错——行为是未定义的。您似乎在这里得到了交错的行为——表达式++i 是增量我然后读取 i。所以你得到增量,增量,读取,读取。
【讨论】: