1、C++中的引用介绍
- 在C++中,引用是指某个已存在变量的别名,也就是说二者共享相同的内存地址。
- 由于它是个别名,因此一定不存在空引用,也就是说必须在创建引用时,就进行初始化,而且只能指向初始化的那个对象。例如:
int i = 17;
int& j = i; // j就是一个初始化为i的整型引用
- 引用常被用于作为函数参数或者函数的返回值,也可以作为范围for循环中变量的引用,即可以在循环中修改容器内的值,例如:
vector<int> a = {0, 1, 2}
int b[] = {3, 4, 5}
for (auto i: a/b) //没有使用引用,不能修改a或者b的值
for (auto &i: a/b) //使用了引用,可以修改a或者b的值
范围for循环是C++11引入的,可以适用于任何顺序容器的元素的循环,例如vector,string等,注意:
1)范围for循环只能遍历/修改容器内的元素
2)不能在遍历当前元素时,知道前后元素的值
2、引用作为函数参数
- 有两种作用:
1)可以在函数内部对该参数进行修改:如果我们将形参定义成引用,那么此时的赋值后形参只是实参的一个别名,因此在函数内部的修改也会作用于变量本身
2)提高函数调用和运行效率:形参是实参的引用,不用经过值的传递机制,已经有了实参值的信息。所以没有了传值和生成副本的时间和空间消耗。当程序对效率要求比较高时,这是非常必要的,
3、引用作为函数返回值
- 以引用返回函数值,定义函数时需要在函数名前加 &
- 用引用返回一个函数值的最大好处是:在内存中不产生被返回值的副本
- 需要注意,不能返回局部变量的引用。主要原因是局部变量会在函数返回后被销毁,因此被返回的引用就成为了"无所指"的引用,程序会进入未知状态。
4、&符号常用于取地址符以及引用
- 取地址符:& 用于获取变量的内存地址。例如,int a = 10; 中的 &a 将返回变量 a 的地址。
int a = 10;
int* ptr = &a; // 获取变量 a 的地址并将其保存在指针 ptr 中
- & 可以用于定义引用类型。引用是一个已存在对象的别名,它与原始对象共享相同的内存地址。
int a = 10;
int& ref = a; // 定义一个整数引用 ref,它是变量 a 的别名