引用的概念
引用是给变量起别名。
引用标识符&的作用
1.定义引用时,表示引用标识符,表示定义的是一个引用,占八字节大小。
2.有两个操作数时,a&b,位运算的按位与。
3.表示取变量地址。
引用的格式
类型名 &引用名=引用的目标;
定义后,a和b的使用方式完全一样。
int a=10;int &b=a;
引用的要求
1.定义引用时必须要有引用的目标来初始化。
2.引用和引用的目标类型要保持一致(继承和多态除外)。
3.引用的目标一旦确定,后面就不能在修改了。
4.普通引用不可以引用常量。
引用的好处
1.引用作为形参时不用再考虑值传递和地址传递的问题了。
2.引用可以避免拷贝,重复分配空间。
引用作为返回值
不能返回局部变量的引用,因为局部变量的空间,在函数结束时会被操作系统回收。
可以返回全局变量或static修饰的局部变量的引用。
引用做返回值 返回的是一个左值(有地址的量)。
结构体中存在引用成员
必须在定义结构体变量时初始化引用成员。
常引用(左值引用)
const修饰的引用叫常引用或左值引用,常引用只能调用常函数。
常引用可以引用常量、临时变量、const修饰的变量。
int a=10;
const int &b=a;//常引用的格式
//b=100;错误
a=100;//正确
不能通过b来修改a的值,但是不影响使用a修改。
右值引用
只能引用临时量和常量,在栈区。
A &&a=B();//右值引用的格式
引用和指针的异同
1.引用必须初始化,指针可以不初始化。引用底层实现时const修饰的指针,const修饰的变量必须赋初值,所以引用需要初始化。指针可以不初始化,会变成野指针。
2.引用不可以改变指向,指针可以。
3.不存在指向NULL的引用,指针可以指向NULL。
4.指针在使用前需要检查合法性,引用不需要。引用所指向的是已经存在的空间,这块空间一定是一个合法的空间。
5.可以定义指针数组,不可以定义引用数组。
6.可以定义数组指针,也可以定义数组引用。
7.可以定义指针函数,也可以定义引用函数。
8.可以定义函数指针,也可以定义函数引用。
9.可以定义指针的指针(二级指针),不可以定义引用的引用(二级引用)。