← 学习中心

生命周期入门

读懂 'a 标注在函数签名中的含义

本节你将能

解释函数签名里 生命周期 标注在约束什么,并读懂简单的 'a

直觉模型

生命周期不是「运行时计时器」,而是编译器的合同条款:返回的引用不能比输入引用活得更久。

核心要点

  • 多数情况下可省略(lifetime elision);显式标注用于消歧义
  • fn longest<'a>(x: &'a str, y: &'a str) -> &'a str 表示返回值与两个输入中较短者挂钩
  • 结构体若持有引用,字段必须带生命周期参数
fn first_word(s: &'a str) -> &'a str {
    s.split_whitespace().next().unwrap_or("")
}

常见误区

试图「返回局部变量的引用」——局部在函数结束时 Drop,任何标注都救不了。

动手

实现比较两个 &str 长度并返回较长者的函数,观察缺少标注时的报错。

互动

测验:哪段代码无法通过编译。

本节小结

下一节用 Box/Rc/Arc 处理「需要堆分配或共享所有权」的场景。

生命周期入门 - 生命科学与前沿科技学习平台 | 必学必会