C++引用的本质与特性
引用是已存在变量的别名,与变量共享同一内存地址。声明时必须初始化且不可更改绑定对象:
cpp
int x = 10;
int& ref = x; // ref成为x的别名
ref = 20; // 修改x的值
引用与指针的核心区别
- 初始化要求:引用必须声明时初始化,指针可延迟初始化
- 对象绑定:引用绑定后不可更改,指针可重新指向
- 空值合法性:指针可为nullptr,引用必须绑定有效对象
cpp
int* ptr = nullptr; // 合法
int& ref; // 编译错误
引用作为函数参数
实现引用传递可修改实参,避免拷贝开销:
cpp
void increment(int& num) {
num += 1;
}
int main() {
int a = 5;
increment(a); // a的值变为6
}
引用作为返回值
返回引用可作左值,但需确保引用对象生命周期:
cpp
int& getElement(int arr[], int index) {
return arr[index];
}
int main() {
int nums[] = {1,2,3};
getElement(nums,1) = 10; // 修改nums[1]
}
引用使用注意事项
- 不可返回局部变量引用
- 可返回静态变量或成员变量的引用
- 函数参数声明为const引用可避免意外修改
cpp
const string& getDefaultName() {
static string name = "default";
return name; // 安全返回
}