生命周期标注并非改变变量的实际存活时间,而是帮助编译器校验引用之间的有效性。深入解析生命周期省略规则与静态生命周期。
1. 为什么需要生命周期标注?
当函数返回引用时,编译器必须知道返回的引用到底是绑定在哪个入参的生命周期上,以防返回已销毁的局部变量引用:
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
if x.len() > y.len() { x } else { y }
}
这里 'a 表示返回值的生命周期与 x 和 y 中生命周期较短的那一个完全一致。