# 生命周期 lifetimes

URL: https://caijiao.org/rust/04-ownership/03-lifetimes
Source: docs/rust/04-ownership/03-lifetimes.md
Description: 生命周期是 Rust 用来管理引用有效范围的机制，保证引用在使用时始终有效，防止悬垂指针和内存安全问题。

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,
}
```

---



Rust Playground 示例代码
