生命周期入门
读懂 '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 处理「需要堆分配或共享所有权」的场景。