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

我用的是MinGW编译器,输出结果为什么是3 3?请大神帮忙分析一下。

 #include <iostream>
using namespace std;
int fun(int &x)
{
    return ++x;
}
int main()
{
    int y=2;
    cout<<y<<" "<<fun(y)<<endl;
    return 0;
}

cout<<y<<" "<<fun(y)<<endl;这个表达式是从右往左求值的,也就是先计算fun(y)在计算y的值,而函数的fun()又是引用传递,在函数中所作的变化会影响到原来的变量,所以执行自增操作后y的值编程了3,而返回值也是3

引用会改变 栈中的值

因为求值顺序是从右往左,先调用fun(y),再计算y。这和下面的语句效果是一样的

printf("%d, %d\n", y, fun(y));

这是因为cout那行代码先调用了fun函数,这时候y的值已经变成3了,如果你把y放后面输出,就应该是3 2。这是cout输出顺序的规律:
计算顺序:自右至左
输出顺序:自左至右