Table of contet:
- 引用的概念
- 引用的本质
- 引用的意义
- 思考点
-
引用的概念
引用是C++中引入的一个新概念,它是一个已定义变量的别名。
int a = 0;
int &b = a;
-
引用的本质
引用在C++中的内部实现是通过常指针来实现的: Type& a <=> Type* const a 但又不等价于常指针(区别间思考点1)
引用定义时必须被初始化,原因是引用的本质是一个常指针,常量在定义时必须初始化
int a = 10;
int b = 20;
int &c = a;
c = b; //可以把b赋值给c, 相当于间接修改a的值
//下面这句是错的
&c = b; //引用一旦初始化之后就不能再引用其它变量了
-
引用的意义
引用相对于指针来说具有更好的可读性和实用性
引用做函数参数间接修改变量的值
-
思考点
普通引用有自己的空间吗?
引用是有自己的内存空间的,从使用的角度,引用会让人误会其只是一个别名,没有自己的存储空间。这是C++为了实用性而做出的细节隐藏。
但有一点需要注意的是:
sizeof(指针) 的值永远是 4
sizeof(引用) 的值是不一定的,根据所引用的对象类型而定
- 用变量对const引用初始化,const引用分配内存空间了吗?
当使用常量(字面量)对const引用进行初始化时,C++编译器会为常量值分配空间,并将引用名作为这段空间的别名
- 用常量对const引用初始化,const引用分配内存空间了吗?
使用字面量对const引用初始化后,将生成一个只读变量
const int b = 10;
printf("b:%d", &b);
//int &a1 = 19; 如果不加const编译失败
const int &a = 19;
printf("&a:%d \n", &a);