引用(Reference)是 C++ 相对于 C 语言的一个扩充。引用可以看做是数据的一个别名,通过这个别名和原来的名字都能够找到这份数据。引用类似于 Windows 中的快捷方式,一个可执行程序可以有多个快捷方式,通过这些快捷方式和可执行程序本身都能够运行程序;引用还类似于人的绰号(笔名),使用绰号(笔名)和本名都能表示一个人;
基本语法 typename & ref = varname;
使用引用的注意事项:
引用必须引用合法的内存空间;
引用在定义时必须初始化;
引用一旦初始化后,就不能再引用其它数据;
引用在定义时需要加上 &,在使用时不能加 &,使用时加 & 表示取地址;
函数中不要返回局部变量的引用;
引用的本质是指针,低层的实现还是指针;
2. 左值、右值、左值引用、右值引用、右值引用的使用场景
左值:在 C++ 中可以取地址的、有名字的就是左值 int a = 10;// 其中 a 就是左值;
右值:不能取地址的、没有名字的就是右值 int a = 10;// 其中 10 就是右值;
左值引用:左值引用就是对一个左值进行引用。传统的 C++ 引用(现在称为左值引用)使得标识符关联到左值。左值是一个表示数据的表达式(如变量名或解除引用的指针),程序可获取其地址。最初,左值可出现在赋值语句的左边,但修饰符 const 的出现使得可以声明这样的标识符,即不能给它赋值,但可获取其地址:int n; int * pt = new int; const int b = 101; int & rn = n; int & rt = *pt; const int & rb = b; const int & rb = 10;
右值引用:右值引用就是对一个右值进行引用。C++ 11 新增了右值引用(rvalue reference),这种引用可指向右值(即可出现在赋值表达式右边的值),但不能对其应用地址运算符。右值包括字面常量(C-风格字符串除外,它表示地址)、诸如 x + y 等表达式以及返回值的函数(条件是该函数返回的不是引用),右值引用使用 && 声明: int x = 10; int y = 23; int && r1 = 13; int && r2 = x + y; double && r3 = std::sqrt(2.0);