主题
生命周期 lifetimes
Rust 中,生命周期(lifetimes)用于标注引用的有效范围,确保所有引用在使用时都指向有效数据。
生命周期标注
使用泛型参数和 'a
语法标注生命周期:
rust
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
if x.len() > y.len() {
x
} else {
y
}
}
此函数要求输入参数和返回值的生命周期一致,避免返回悬垂引用。
生命周期省略规则
Rust 编译器会在某些场景自动推断生命周期,简化代码:
- 每个引用参数都有自己的生命周期。
- 如果只有一个输入生命周期,返回值会自动采用该生命周期。
生命周期应用场景
rust
fn main() {
let string1 = String::from("abcd");
let string2 = "xyz";
let result = longest(string1.as_str(), string2);
println!("最长的字符串是 {}", result);
}
如果省略生命周期,编译器会报错,因为无法确定返回引用的有效期。
生命周期与结构体
结构体中包含引用时也需标注生命周期:
rust
struct ImportantExcerpt<'a> {
part: &'a str,
}