cout输出顺序
代码测试
#include <iostream>
using namespace std;
int main() {
int i = 0;
cout << i++ << i++ << i << ++i << endl;
int j = 0;
cout << j++;
cout << j++;
cout << j;
cout << ++i;
cout << endl;
return 0;
}
结果截图
总结
-
参数从右到左入栈
-
i:将i的引用压入栈
-
i++:将i的值压入栈,再进行i+=1
-
++i:先进行i+=1,再将i的引用压入栈
-
有编译器优化导致的不同结果,这个是vsstudio的结果
-
这是linux下运行的结果,按函数顺序来执行,cout使用第一个参数i++,返回ostream对象,再对第二个参数i++操作,以此类推
-
因为表达式的行为不可预知,所以不论编译器生成什么样的代码程序都是错误的
-
这个问题是没有讨论的必要的,因为这没有答案,系统不同、编译器不同,编译出来的结果就可能不同,但是都是符合语言标准的