C++ 引用
左值引用、右值引用、引用与指针的区别及应用场景。
1. 引用基础
引用是变量的别名,必须在声明时初始化,且一旦绑定就不能重新绑定到其他变量。
int x = 10;
int& r = x; // 声明对 x 的引用
r = 20; // 修改 r 就是修改 x
std::cout << x; // 输出 20
2. 引用的特性
- 必须初始化: 声明时必须绑定到一个变量
- 不可重绑定: 一旦绑定,不能改变指向
- 不能为空: 引用必须指向有效对象
- 不能建立引用的引用: 不能有引用的引用
- 不能建立数组的引用: 不能直接引用数组
3. 引用与函数
// 引用作为函数参数(传引用)
void swap(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int x = 10, y = 20;
swap(x, y);
std::cout << x << " " << y; // 输出 20 10
return 0;
}
// 引用作为函数返回值
int& get_element(int arr[], int index) {
return arr[index];
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
get_element(arr, 2) = 10; // 修改数组元素
std::cout << arr[2]; // 输出 10
return 0;
}
4. 常量引用
// 常量引用可以绑定到常量或临时值
const int& cr = 10; // 合法,临时值会被延长生命周期
// 常量引用可以绑定到不同类型(隐式转换)
double d = 3.14;
const int& cr2 = d; // 合法,d 会被转换为 int
// 非常量引用不能绑定到临时值
// int& r = 10; // 错误
// 非常量引用不能绑定到不同类型
// int& r2 = d; // 错误
5. 指针与引用的区别
| 特性 | 指针 | 引用 |
|---|---|---|
| 空值 | 可以为空 | 不能为空 |
| 重绑定 | 可以改变指向 | 不能改变绑定 |
| 内存开销 | 占用内存空间 | 不占用额外内存 |
| 操作符 | 使用 * 解引用 | 直接使用 |
| 算术运算 | 支持指针算术 | 不支持 |
| 多级 | 支持多级指针 | 不支持引用的引用 |
更新日志 (Changelog)
- 2026-05-27: 从 C13_103 拆分,专注于引用相关内容。