C++问题,大家过来看下

来源:百度知道 编辑:UC知道 时间:2024/07/07 22:04:51
#include <iostream.h>

void main()
{
int b=10;
int &a=b;
cout<<++a<<","<<b<<endl;
}

结果为什么显示的是11,10,但我进行调试的时候发现,a,b都为11,b输出时为什么还是10

对于cout它是从右向左计算的,先计算了b的值,然后再++a,所以才会出现那样的结果。。即:先b=10;然后++a,所以结果是11,10;
如果在cout<<++a<<","<<b<<endl; 下在添一句
cout<<b<<endl;
则输出为
11,10
11

试了一下,如果改成
#include <iostream.h>

void main()
{
int b=10;
int &a=b;
cout<<a<<","<<++b<<endl;
}
的话,输出就是11,11
可能是在VC++中cout语句是右向左算的,和TC中的printf一样,对于输出列表中的表达式的运算,先右后左

先解析b再到++a,是从右到左进行的

这个取决于编译器哈,有的编译器会是11,10,有的是11,11.比如我在VS2008上面就是11,11。。

你可以把代码修改为下面这个试试:
int main()
{
volatile int b=10;
volatile int &a=b;
cout<<++a<<","<<b<<endl;

return 0;
}

这属于 变量引用 ,首先 ,int &a = b;这个说明 a 是 b 的另一个变量名,系统不会为 a 重新分配内存地址 ,它和b共用一个内存地址 。那么a 变了 ,b 也就变了 !