引用(C++)
引用
- 一、引用的基本语法
- 二、引用的特性
- 1. 引用必须初始化
- 引用一旦绑定,就不能更改绑定对象
- 引用不是指针
- 三、引用的用途
- 1. 作为函数参数(传引用)
- 2. 作为函数返回值(返回引用)
- 四、常量引用(const引用)
- 五、引用与指针的对比
- 六、引用的种类
- 七、右值引用和移动语义(高级)
- 总结
C++中的引用(Reference)是C++的一项重要特性,它为变量提供了一个别名。引用本质上是变量的另一种名字,它和原变量绑定在一起,操作引用就等于操作原变量。
一、引用的基本语法
int a = 10;
int& ref = a; // ref是a的引用
说明:
-
int& ref = a; 声明了一个整型引用 ref,它绑定到变量 a。
-
从此以后,对 ref 的操作就是对 a 的操作。
二、引用的特性
1. 引用必须初始化
引用在声明时必须立刻绑定到某个变量上,不能晚于声明。
int& ref; // 错误!引用必须初始化
引用一旦绑定,就不能更改绑定对象
int a = 10;
int b = 20;
int& ref = a;
ref = b; // 这里是把b的值赋给a,而不是让ref引用b
引用不是指针
-
引用不能为 null。
-
引用无需解引用(不像指针需要 *)。
三、引用的用途
1. 作为函数参数(传引用)
避免值传递的拷贝开销,并且允许修改实参。
void swap(int& a, int& b) {int temp = a;a = b;b = temp;
}
2. 作为函数返回值(返回引用)
允许链式操作或修改函数外部的数据。
int& getElement(int arr[], int index) {return arr[index];
}int main() {int nums[3] = {1, 2, 3};getElement(nums, 1) = 100; // nums[1] 变为100
}
⚠️ 注意:返回局部变量的引用是错误的,会造成悬垂引用!
四、常量引用(const引用)
void print(const int& x) {std::cout << x << std::endl;
}
特点:
-
可以绑定临时变量或字面值。
-
不允许通过该引用修改值。
-
用于提高效率,同时保护数据。
五、引用与指针的对比
特性 | 引用 | 指针 |
---|---|---|
是否必须初始化 | 是 | 否 |
是否可变绑定 | 否 | 是 |
是否可为null | 否 | 是 |
语法复杂度 | 更简单 | 稍复杂 |
使用时是否需要解引用符 * | 否 | 是 |
六、引用的种类
-
左值引用(Lvalue Reference):int& —— 绑定到可取地址的变量。
-
常量引用(Const Reference):const int& —— 可绑定到常量或右值。
-
右值引用(C++11引入):int&& —— 用于绑定临时对象,支持移动语义。
七、右值引用和移动语义(高级)
int&& r = 10; // 右值引用,可以绑定临时值
-
用于资源的“移动”而不是“复制”。
-
提高性能,尤其在涉及大对象或资源的场景下。
-
与std::move搭配使用。
总结
C++引用是一种语法糖,底层通常由指针实现,但使用起来更安全、简洁。掌握引用对理解C++函数调用、内存管理和现代C++特性(如移动语义、完美转发)至关重要。