C++ 输出值后输出引用参数的函数值结果为什么是这样

C++语言 码拜 8年前 (2016-09-12) 1341次浏览
本人用的是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。
不同的编译器可能有不同的行为,就题主使用的编译器来看是后一种情况。

8

这是未定义行为,涉及到顺序点问题

3

引用:

这是未定义行为,涉及到顺序点问题

这里还不算未定义行为,只是unspecific behavior。原因是重载后的<<运算符被当做函数处理,而函数之间不能交叉。不过反正都是应该避免的代码。

10

一时让人有点难以琢磨,网上给出了其靠谱的解释:cout流的操作顺序是:先从右往左读入缓冲区,然后再从左往右输出。所以它从右边往左读的时候,碰到了函数当然去执行函数先了,然后把函数返回值读入缓冲区再然后。就是从左输出了。而且你的调用函数用的是引用,所以y的值也就改变了,假如把引用符号去掉,y依然是2

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++ 输出值后输出引用参数的函数值结果为什么是这样
喜欢 (0)
[1034331897@qq.com]
分享 (0)