我用的是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输出顺序的规律:
计算顺序:自右至左
输出顺序:自左至右