本人用的是MinGW编译器,输出结果为什么是3 3,为什么不是2 3呢?请高手帮忙分析一下。
#include <iostream> using namespace std; int fun(int &x) { return ++x; } int main() { int y=2; cout<<y<<" "<<fun(y)<<endl; return 0; }
解决方案
2
好像是先调用函数,题主调试一下,看是先调用函数,还是先输出y!
1
cout的输出是带有缓存的输出。遇到endl才会将变量输出到屏幕
1
fun(y)和y的求值顺序不确定。
假如先求值y就是2 3;假如先求值fun(y)就是3 3。
不同的编译器可能有不同的行为,就题主使用的编译器来看是后一种情况。
假如先求值y就是2 3;假如先求值fun(y)就是3 3。
不同的编译器可能有不同的行为,就题主使用的编译器来看是后一种情况。
8
这是未定义行为,涉及到顺序点问题
3
这里还不算未定义行为,只是unspecific behavior。原因是重载后的<<运算符被当做函数处理,而函数之间不能交叉。不过反正都是应该避免的代码。
10
一时让人有点难以琢磨,网上给出了其靠谱的解释:cout流的操作顺序是:先从右往左读入缓冲区,然后再从左往右输出。所以它从右边往左读的时候,碰到了函数当然去执行函数先了,然后把函数返回值读入缓冲区再然后。就是从左输出了。而且你的调用函数用的是引用,所以y的值也就改变了,假如把引用符号去掉,y依然是2