生命周期标注并非改变变量的实际存活时间,而是帮助编译器校验引用之间的有效性。深入解析生命周期省略规则与静态生命周期。

1. 为什么需要生命周期标注?

当函数返回引用时,编译器必须知道返回的引用到底是绑定在哪个入参的生命周期上,以防返回已销毁的局部变量引用:

fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
    if x.len() > y.len() { x } else { y }
}

这里 'a 表示返回值的生命周期与 x 和 y 中生命周期较短的那一个完全一致。