C++小程序输出结果

来源:百度知道 编辑:UC知道 时间:2024/07/08 21:33:17
#include <iostream>
using namespace std;
class A
{
public:
A(){ cout<<"Ak1"; }

A(const A&){ cout<<"Ak2"; }

A& operator=(const A&) {cout<<"A=";return *this;}

~A(){ cout<<"Ad"; }
};
A& fun( A x){cout<<"fun";return x;}

int main()
{
A a;
cout<<"L1"<<endl;
A b = fun(a);
cout<<"L2"<<endl;
A& r = b;
cout<<"L3"<<endl;
A t= a;
return 0;
}

/*
输出结果:

AK1L1
AK2funAdAk2L2
L3
Ak2AdAdAd
*/

对于输出结果有点模棱两可。尤其是为什么执行 A& r = b; 时,为什么不执行任何操作?该表达式在这起什么作用?
还有就是 & 操作符 到底是干嘛用的,一直很模糊。。。

A& r = b; 声明r为b的别名,即这两个变量名被编译器翻译成指向相同的地址。今后对r操作等同于对b操作。
由于指向相同的地址,所以没有任何对象的构造与析构。

给楼主一个建议哈

试一下赋值构造函数
比如 声明 A x,A y
x = y

&是引用,变量的别名的意思。

&是取地址,就是取变量名的地址,对这个地址进行操作,也就是直接修改变量的存储内存