引用为何是变量的别名
将引用介绍为编译期别名;引用不能重新绑定,也不能为 NULL
引用为何是变量的别名 是 CoddyKit 上的免费 C++ Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C++ Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C++ Academy 课程共包含 4 节课。
什么是引用
引用是另一个变量在编译时的别名。它不是 pointer,也不是副本,而是同一个对象的另一个名称。
引用语法
请在类型后使用 &。引用必须在声明时初始化,并且不能重新绑定。
int x = 10;
int& ref = x; // ref is an alias for x
ref = 20; // x is now 20与 pointer 的比较
引用和指针都提供间接访问,但二者有以下区别:
- 引用必须初始化;pointer 可以为空
- 引用不能重新赋值给另一个对象
- 引用从不使用
*或->,看起来像普通变量
不会重新绑定
一旦绑定,引用就始终指向同一个对象。给它赋值会修改底层值,而不是引用本身。
int a = 1, b = 2;
int& r = a;
r = b; // a becomes 2, r still refers to a引用具有相同的地址
引用的行为就像原始变量一样。获取它的地址时,得到的是被引用对象的地址。
int x = 42;
int& r = x;
std::cout << (&r == &x); // 1 (true)const 引用
const 引用是只读别名。它适合在不复制的情况下传递大型对象。
void print(const std::string& s) {
std::cout << s; // can read, not modify
}将 const 引用绑定到临时对象
const 引用会将临时对象的生命周期延长至引用本身的生命周期,这在表达式中很方便。
const std::string& greeting = std::string("Hi");
std::cout << greeting; // valid将引用作为返回类型
函数可以返回引用,这对于链式调用或直接访问成员很有用。但请注意,不能返回局部变量的引用!
int& at(std::vector<int>& v, size_t i) {
return v[i];
}
at(v, 0) = 99; // modifies v[0]切勿返回局部变量的引用
局部变量会在函数返回时销毁;引用会变成悬空引用。这属于未定义行为。
// BUG
int& bad() {
int x = 10;
return x; // x dies here
}基于范围的 for 中的引用
基于范围的 for 会隐式使用引用。auto& 获取引用;auto 获取副本。
结构化绑定中的引用
C++17 的结构化绑定可以按值、按引用或按 const 引用进行绑定。
std::pair<int, int> p = {1, 2};
auto [a, b] = p; // copies
auto& [x, y] = p; // references — modifying x changes p.first快速检查
为什么引用之后不能重新绑定到另一个变量?
回顾
引用是必须初始化且不能重新绑定的编译时别名。它看起来像普通变量,永远不会为空,也不能重新赋值。对于只读视图,请使用 const 引用。
常见问题解答
「引用为何是变量的别名」课时是免费的吗?
是的 — 「引用为何是变量的别名」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C++ Academy 课程的其余内容,请升级到 CoddyKit PRO。 C++ Academy 课程共包含 4 节课。
「引用为何是变量的别名」这节课中我会学到什么?
将引用介绍为编译期别名;引用不能重新绑定,也不能为 NULL 你通过在浏览器中直接运行的动手代码来练习 C++ Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 C++ Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 C++ Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「引用为何是变量的别名」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 C++ Academy 课中编写并运行代码吗?
能。每节 C++ Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 引用为何是变量的别名
- 按值传递与按引用传递
- const 引用及其适用场景
- 引用的生命周期与悬空引用