引用 &
左值引用、引用 vs 指针、const 引用、引用做参数
引用 &
引用是 C++ 独有的概念 —— 一个变量的别名,不是地址的副本。它让参数传递既高效(不拷贝)又安全(不用指针语法)。
学完本章你将: 掌握左值引用、const 引用、引用 vs 指针、引用做参数/返回值。
引用作为别名
cpp
#include <iostream>
int main() {
int x = 42;
int &ref = x; // ref 是 x 的引用(别名)
ref = 100; // 修改 ref 就是修改 x
std::cout << x << "\n"; // 100
// 引用必须初始化,且不能重新绑定
int y = 10;
// ref = y; // 这是把 y 的值赋给 x,不是让 ref 指向 y
return 0;
}
引用做函数参数
cpp
// ❌ 值传递——拷贝整个对象(慢、占内存)
void bad(std::string s) {
s += "!";
}
// ✅ const 引用——不拷贝,但不能修改
void good(const std::string &s) {
std::cout << s << "\n";
}
// ✅ 非 const 引用——用于修改参数
void modify(std::string &s) {
s += " (modified)";
}
int main() {
std::string s = "Hello";
good(s); // 不拷贝,效率高
modify(s); // s 变为 "Hello (modified)"
good("temp"); // 也能传右值
}
引用 vs 指针
cpp
void byPointer(int *p) { if (p) *p = 100; } // 必须判空
void byRef(int &r) { r = 100; } // 不可能为空
int x = 0;
byPointer(&x); // 需要取地址
byRef(x); // 直接传,语法清爽
| 引用 | 指针 | |
|---|---|---|
| 语法 | `int &r = x;` | `int *p = &x;` |
| 使用 | `r` (自动解引用) | `*p` (显式解引用) |
| 空值 | 不可能 | 可能 (nullptr) |
| 重新绑定 | 不能 | 可以 |