1.概念
引用不是新定义一个变量,而是给已存在的变量取了一个别名,
编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。
使用:类型&引用变量名(对象名)=引用实体
2.引用特性
-1.引用在定义时必须初始化
-2.一个变量可以有多个引用
-3.引用一旦引用一个实体,再不能引用其他实体
-4.引用类型必须和引用实体是同种类型的
3.常引用
const int -只读
int -可读可写
引用对象的访问权限可以缩小,不能扩大
const int a=10;
int&ra=a;×
const int&ra=a;√
int b=20;
int&rb=b;√
const int&rb=b;√
4.引用使用场景
-1.做参数
void Swap(int&left,int&right);
-2.做返回值
int& Add(int a,int b)
{
static int c=a+b;
return c;
}
如果函数返回时,出了函数作用域,如果返回对象还未还给系统,则可以使用引用返回
如果已经还给系统了(栈帧销毁),则必须使用传值返回
5.传值和传引用效率比较
以值作为参数或返回值类型,
在传参和返回期间,
函数不会直接传递实参或将变量本身直接返回,
而是传递实参或者返回变量的一份临时拷贝,
因此用值作为参数或返回值类型,效率很低。
6.引用和指针的区别
在语法概念上,引用就是一个别名,没有独立空间,和引用实体共用同一块空间
在底层实现上是有空间的,因为引用是按照指针方式来实现的
7.引用和指针的不同点
-1.引用在定义时必须初始化,指针没有要求
-2.引用在初始化引用一个实体后,就不能再引用其他实体,指针可以在任何时候指向任何一个同类型的实体
-3.在sizeof中含义不同
引用结果为引用类型大小,指针是4/8个字节
-4.引用自加即引用实体增加1,指针自加即指针向后偏移一个指针类型的大小
-5.没有NULL引用,但有空指针
-6.没有多级引用,但有多级指针
-7.访问实体方式不同
指针需要显式解引用,引用编译器自己处理
-8.引用比指针使用更加安全