功能参数(输入寿命)

fn foo<'a>(x: &'a u32) {
    // ...
}

这指定 foo 具有寿命'a,参数 x 必须具有至少'a 的寿命。函数生命周期通常通过生命周期省略省略 :

fn foo(x: &u32) {
    // ...
}

在函数将多个引用作为参数并返回引用的情况下,编译器无法通过生命周期省略来推断结果的生命周期

error[E0106]: missing lifetime specifier
1 | fn foo(bar: &str, baz: &str) -> &i32 {
  |                                 ^ expected lifetime parameter

相反,应明确指定生命周期参数。

// Return value of `foo` is valid as long as `bar` and `baz` are alive.
fn foo<'a>(bar: &'a str, baz: &'a str) -> &'a i32 {

函数也可以使用多个生命周期参数。

// Return value is valid for the scope of `bar`
fn foo<'a, 'b>(bar: &'a str, baz: &'b str) -> &'a i32 {