一、引用
1. 引用概念
引用不是新定义一个变量,而是给已存在变量取了一个别名。编译器不会为引用开辟新的内存空间,它和引用的变量共用同一块内存。
void TestRef() {
int a = 10;
int& ra = a; // 定义引用类型
printf("%p\n", &a);
printf("%p\n", &ra);
}
注意:引用类型必须和引用实体是同种类型的。
2. 引用特性
- 定义时必须初始化。
- 一个变量可以有多个引用。
- 引用一旦绑定一个实体,不能再指向其他实体(后续赋值是修改值,而非改变指向)。
#include <iostream>
using namespace std;
int main() {
int a = 10;
// int& ra; // 编译报错:必须初始化引用
int& b = a;
int& d = a; // 一个变量可以有多个引用
int c = 20;
b = c; // 这里并非让 b 引用 c,而是将 c 的值赋给 b 所指的 a
return 0;
}
3. 常引用
const 修饰的引用即常引用。当常引用绑定临时变量时,会延长临时变量的生命周期,使其与常引用的生命周期一致。
4. 使用场景
引用做参数: 避免大对象拷贝,提高效率。形参和实参指向同一实体,不用担心值拷贝问题。
void Swap(int& left, int& right) {
int temp = left;
left = right;
right = temp;
}


