前置知识: C++

C++ 引用

00:00
1 min Intermediate

左值引用、右值引用、引用与指针的区别及应用场景。

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 拆分,专注于引用相关内容

知识检测

学习进度

-- 已学文档
--% 知识覆盖率

学习推荐

专注模式