一、引用的使用
在使用层面,引用相当于变量的别名,使用方式和普通的非指针变量完全相同,可以简单的理解为为同一块内存区域取了不同的名字,使用每个名字都可以等效的对内存区域进行操作。
二、引用的本质
int a = 100;
int &b = a;
int a = 100;
int * const b = a;
以上两段代码是等价的,C++在底层实现引用机制的时候,用的就是常指针。
引用实际上是占用内存空间的,打印a和b的地址是相同的,只是C++隐藏了底层的实现。
三、引用和指针的区别和联系
- 引用必须初始化,指针可以不初始化
- 引用只有一级引用,指针可以有多级指针
- 定义一个指针变量和定义一个引用变量,其汇编代码是相同的,都是对地址的操作
- 指针不能指向临时对象,但是const引用可以指向临时对象
- 指针不能指向右值,而右值引用可以引用右值
四、左值引用和右值引用
int a = 10;
int &b = a; //这里是左值引用
int &&c = 10; //这里是右值引用,形式上类似于2级指针
int &&d = a; //这里是非法的,因为右值引用会开辟临时变量,而已有变量无需临时变量
右值引用在编译的过程中会产生临时变量,所以右值引用不能使用变量赋值。
五、引用和指针结合
int a = 10;
int*p =&a;
int*&b = p; //该语句定义了一个指针引用,等价于 int** b = &p;