无意中看到一篇文章讲到对于引用的本质的讨论,其中提出了一个很有意思的结论,引用是一个常量指针,于是我进行了一番探索
int a = 1;
int &b = a;
cout<<"========="<<endl;
a = 3;
cout<<"a的地址:"<<&a<<endl;
cout<<"b:"<<b<<endl;
cout<<"b的地址:"<<&b<<endl;
cout<<"b的地址取值:"<<*&b<<endl;
cout<<"========="<<endl;
a = 4;
cout<<"a的地址:"<<&a<<endl;
cout<<"b:"<<b<<endl;
cout<<"b的地址:"<<&b<<endl;
cout<<"b的地址取值:"<<*&b<<endl;
cout<<"========="<<endl;
b= 5;
cout<<"a的地址:"<<&a<<endl;
cout<<"b:"<<b<<endl;
cout<<"b的地址:"<<&b<<endl;
cout<<"b的地址取值:"<<*&b<<endl;
输出内容如下:
=========
a的地址:0x7ffeefbff214
b:3
b的地址:0x7ffeefbff214
b的地址取值:3
=========
a的地址:0x7ffeefbff214
b:4
b的地址:0x7ffeefbff214
b的地址取值:4
=========
a的地址:0x7ffeefbff214
b:5
b的地址:0x7ffeefbff214
b的地址取值:5
我个人理解:引用b是一个常量指针,b指向的地址是固定的,这个地址中存储的变量是随赋值的变化而变化,int &b = a
这个过程实际上是将变量a的地址赋值给一个常量指针b,b = 5
这个赋值的过程应该看成 *&b = 5
,引用b的有效期就是a变量的有效期,大概就这样了,你明白了吗?