求助C++高手!!为什么cout后面的两个y的值不相同??

来源:百度知道 编辑:UC知道 时间:2024/06/04 08:49:02
#include<iostream>
#include<string>
using namespace std;

int f(int &x,int &y){
++y;
return x+y;
}
int main(){
int x=2;
int y=3;
cout<<y<<endl<<f(x,y)<<endl<<y<<endl;
return 0;
}
为什么是输出:4 6 3?而不是:4 6 4???

在计算机里,cout语句实际是从右到左执行的,也就是说在
cout<<y<<endl<<f(x,y)<<endl<<y<<endl;
语句里,计算机里面实际是倒过来输出的:y的初值是3, f(x,y) 是6,执行了++y后 左边的y变成4。
而真正输出到屏幕上我们又把他按照我们的习惯判断再倒过来一次,就是这样的问题了。

简单说:编译系统在处理cout输出流时,先按自右向左的顺序对各个输出项求值,左边的项当然受右边的影响咯。但输出却是自左向右的。

我是学计算机的,我们刚好上到这里。参考谭浩强c++程序设计第二章34页自增自减运符。

实在是想不通,按照C++的标准,<<运算应该是左结合的,也就是说那一句的加括号形式应该是:
( ( ( ( ( ( cout<<y ) <<endl ) << f(x,y) ) <<endl ) <<y ) <<endl );
而对应的结果应该是
3 6 4
但加了括号的实际运行的结果仍是
4 6 3
看来还得等高人指教了!

同意楼上,在vc++,turob C等编译器中,cout都是自右至左执行的。

当然不同。
f(int &,int &)是传址,而不是传内容。
++y;这句就把y的值改掉了。