面试题答案
一键面试fn longest<'a>(s1: &'a str, s2: &'a str) -> &'a str {
if s1.len() > s2.len() {
s1
} else {
s2
}
}
生命周期标注规则解释
<'a>
:这是生命周期参数声明。在Rust中,当函数涉及多个引用参数且它们之间存在生命周期关系时,需要显式声明生命周期参数。这里的'a
代表一个通用的生命周期,它并不实际指定具体的生命周期时长,只是作为一个占位符,用于后续标注引用的生命周期。s1: &'a str
和s2: &'a str
:这表示参数s1
和s2
都是字符串切片,并且它们的生命周期都是'a
。这意味着在函数调用期间,s1
和s2
所引用的数据至少要存活到函数调用结束。-> &'a str
:函数返回值是一个字符串切片,其生命周期同样是'a
。这确保了返回的切片所引用的数据在函数调用结束后仍然有效,并且与传入的参数s1
和s2
的生命周期一致。如果不这样标注,编译器无法确定返回值所引用的数据的生命周期,可能会导致悬空指针等问题。通过统一生命周期标注为'a
,编译器可以保证在函数调用结束时,返回值仍然指向有效的数据。