如何理解for循环的条件更新

for(int i = 0; i < 5; cout<<i<<" "<<i++<<endl);
我以为,这段代码的输出是:
0 0
1 1
2 2
3 3
4 4
但结果确实这样的:
1 0
2 1
3 2
4 3
5 4
为什么会出现这种情况,第一个i和第二个i不应该输出是一样的吗?
表示很难理解啊~

15个回答

 cout<<i<<" "<<i++<<endl

计算是从右至左执行的,而打印是从左往右的。

suoyiyin
suoyiyin 回复u011606457: 不会就别乱说
一年多之前 回复
u011606457
_1_1_7_ ++操作符的优先级比<< 符号高,所以先执行了i++
一年多之前 回复
Kaity2011
Kaity2011 cout中包含表达式先计算表达式,之后执行入栈操作,输出的时候按照栈顶出栈操作
一年多之前 回复

<<输出流操作从右向左执行,输出是从左向右输出的。++使i自增,然后就是上面的样子了

cout 没有明确的规定何时以及如何对运算对象求值。编译器可能先求++i的值再求i的值,也可能反过来求值,这个属于求值顺序中的未定义。
详见C++ Primer 求值顺序这一章节

这个运算符的执行是从右到左

第二输出的是(i++)。这个有个“++”的操作符。作用是把变量i自加1。还有一个为什么是先输出后面的结果,因为cout流的缘故

<<的流操作是从右往左的

你的语句相当于这样
for(int i = 0; i < 5;)
cout<<i<<" "<<i++<<endl;
这样的写法本来就是不符合语法规范的,因为编译器的问题,编译器不同结果也不同。。。。
至于结果为什么会是1 0 而不是 0 1,建议你学习一下汇编
如果你知道参数入栈出栈顺序的话也能勉强理解这个问题

感觉整句看的都好凌乱,这个还是可以换成最简单写法来写

不一样的,表达式的高低先后问题,后加高于输出,所以先输出i+1,再输出i

i++会先输出i,再进行加加这个工作,输出成那样,也有可能是缓存的问题

共15条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!