引言:本节我们讲一下C++中的引用
一、引用
先看一下下面这段代码:
在这段代码中。我们命名了两个变量,a和_a,其中_a就是a的引用
所谓引用就是a的“别名”,我们看一下这段代码的运行结果:
发现其地址一样,所以我们去改变a的值也会把_a的值也改变了。
- 引用必须在定义时就初始化。
- 引用自开始定义后,就无法变更引用对象。
- 一个变量可以有多个引用,但是不能引用的引用 。
- 引用类型需与被引用对象类型保持一致,即:
const int a = 0;
const int& _a = a;
不能:int& _a = a;(因为被引用对象不可改变,引用后也不能改变其值)
但如果:
int a = 0;
const int& _a = a;
这样是可以的,a可以改变,引用后可以改变也可以不改变
引用可以做参数和返回值
这段代码中将a传入函数,让a+100,并返回a。
可以看到直接改变了a的值。
其实到这里,你可能已经有疑问,这个和之前C中的指针有种说不出的相似。
事实上,在编译和cpu视角上,指针和引用是没有区别的,他们都是靠地址来识别的。
在C++中很多学者都不提倡滥用指针。
指针和引用的区别:
- 引用在概念上是定义一个变量的“别名“,而指针是存储一个变量的地址。
- 引用在定义时必须初始化,指针没要求。
- 引用在初始化一个实体后,就不能改变被引用对象,而指针可以。
- 指针可以NULL(C++11之后推荐使用nullptr)。
- sizeof(),引用的结果为引用类型的大小,指针为地址的大小(32位是4字节)。
- 指针可以指针的指针,引用不行。