0Pricing
C++ Academy · 课时

引用为何是变量的别名

将引用介绍为编译期别名;引用不能重新绑定,也不能为 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 引用为何是变量的别名
  2. 按值传递与按引用传递
  3. const 引用及其适用场景
  4. 引用的生命周期与悬空引用
← 返回 C++ Academy