您好,匿名用户
随意问技术百科期待您的加入

C++ 中关于cout和i++、++i的问题

0 投票
#include <iostream>
using namespace std;
int main(){
	int i=0;
	cout<<i++<<" "<<i++<<endl;//输出1 0
	i=0;
	cout<<++i<<" "<<++i<<endl;//输出2 2

}

对以上代码的输出如何解释?不太明白(编译环境为VS2010)

用户头像 提问 2013年 11月4日 @ Zac 列兵 (77 威望)
分享到:

1个回答

0 投票
 
最佳答案

赞同蓝皮鼠说的,请不要再纠结这种和编译器细节有关的东西了,因为第一你不需要了解,第二如果你需要了解那只能是你在写这个编译器,第三你了解的再多也可能和平台、CPU等有关系——他们随时可以变化。一句话,这不是推荐的代码风格,请避免这种写法。

我在我的Mac上用i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)测试,结果和你说的一样。

可能出现这种情况的理由是:

cout<<i++<<" "<<i++<<endl;//输出1 0

等价于

operator<<( operator<<( operator<<(cout, i++), " "), i++);

关于C++里面的执行细节,参见http://en.wikipedia.org/wiki/Sequence...,而上面这个函数表现的和你想的不一样,是因为函数参数的evaluation顺序没有定义,编译器可以做它自己想做的优化,比如就先把外层函数调用的参数i++evaluate成0,i变成了1,然后内层调用再得到的就是i==1了。

用户头像 回复 2013年 11月5日 @ Soraka 上等兵 (319 威望)
选中 2013年 9月7日 @Zac
提一个问题:

相关问题

0 投票
1 回复 38 阅读
0 投票
0 回复 19 阅读
用户头像 提问 2013年 9月10日 @ Draven 上等兵 (325 威望)
0 投票
1 回复 41 阅读
用户头像 提问 2012年 12月1日 @ Trish 上等兵 (154 威望)
0 投票
1 回复 47 阅读
用户头像 提问 2012年 12月1日 @ Riven 上等兵 (334 威望)
0 投票
0 回复 25 阅读
用户头像 提问 2012年 12月1日 @ Kayle 上等兵 (277 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...