如何理解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不应该输出是一样的吗?
表示很难理解啊~

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

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

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

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

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

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

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

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

cout<<i<<" "<<i++<<endl 会被重新编译成 cout<<i++ ; cout<<“ ”; cout<<i;前面的是简写,后面的才是输出的基本单位。

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

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

因为cout的缘故,会先计算i++,或者++i,所以实际就先计算了右侧的i=0,然后i++=1,再计算左边的i,也就是1,所以是1,0,下面的同理。

你这个和for语句没有关系,是最后cout有问题。

<<操作是从右向左执行的。
先执行i++
然后再执行i,此时i的结果已经自加了1
所以结果是
1 0
2 1
3 2
4 3
5 4

因为 先打印i 然后做i=i+1 然后在打印i

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