一、引用的基本概念
引用(Reference)是C++中一种特殊的变量类型,它为已存在的变量提供了一个别名 (Alias)。引用在声明时必须初始化,且一旦绑定到一个变量后,就不能再绑定到其他变量。引用的本质是一个常量指针(编译器自动完成解引用操作)。
语法格式:
cpp
数据类型 &引用名 = 原变量名;
示例代码:
cpp
int a = 10;
int &ref = a; // ref是a的别名
cout << "a = " << a << endl; // 输出10
cout << "ref = " << ref << endl; // 输出10
ref = 20; // 修改ref相当于修改a
cout << "a = " << a << endl; // 输出20
二、引用 vs 指针
引用和指针都能间接操作变量,但有显著区别:
| 特性 | 引用 | 指针 |
|---|---|---|
| 初始化 | 必须初始化 | 可以不初始化 |
| 绑定目标 | 绑定后不可更改 | 可指向不同地址 |
| 空值 | 不能为NULL | 可以为NULL |
| 访问方式 | 直接使用(无需*) |
需通过*解引用 |
| 内存占用 | 不占用额外内存(别名) | 占用指针变量内存 |
三、引用作为函数参数
引用常用于函数参数传递,实现按引用传递(Pass by Reference),避免拷贝大对象。
示例:交换两个数
cpp
void swap(int &x, int &y) {
int temp = x;
x = y;
y = temp;
}
int main() {
int a = 5, b = 10;
swap(a, b); // a和b的值被交换
cout << "a=" << a << ", b=" << b << endl; // 输出a=10, b=5
return 0;
}
四、常量引用(const引用)
常量引用用于防止通过引用修改原数据,常用于传递只读参数或临时对象。
语法:
cpp
const 数据类型 &引用名 = 原变量名;
示例:
cpp
int x = 100;
const int &ref = x; // 不可通过ref修改x
// ref = 200; // 错误!编译报错
五、引用作为函数返回值
函数可以返回引用,但不能返回局部变量的引用(局部变量在函数结束后销毁)。通常用于返回静态变量、成员变量或传入的引用参数。
正确示例:
cpp
int &getLarger(int &a, int &b) {
return (a > b) ? a : b;
}
int main() {
int x = 5, y = 8;
getLarger(x, y) = 100; // 将较大的数(y)改为100
cout << "y=" << y << endl; // 输出100
return 0;
}
六、引用的底层原理
引用在底层通过指针实现,编译器会自动处理解引用操作。例如:
cpp
int a = 10;
int &ref = a;
编译器将其转换为:
cpp
int *const ref = &a; // 常量指针
使用时ref会被替换为*ref。
总结
- 引用是变量的别名,必须初始化且不可重绑定。
- 引用传递避免拷贝,提高效率。
- 常量引用保护数据不被修改。
- 返回引用时注意生命周期管理。
下期预告:类和对象基础。思考题:
函数参数使用
const std::string&传递字符串,相比直接传值(std::string)有哪些优势?