rust 函数参数和返回值之间的生存期关系

guz6ccqo  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(96)

问题1

这两种功能在 rust 病中有什么区别?

fn foo<'a>(x: &'a i32) -> &'a i32 {
    x
}
fn foo<'a: 'b, 'b>(x: &'a i32) -> &'b i32 {
    x
}

问题2

当在多个函数参数中以及在返回值中使用相同的生存期参数'a时,提供了哪些约束?

fn foo<'a>(x: &'a i32, y: &'a i32) -> &'a i32 {
    ...
}
toiithl6

toiithl61#

就我所知有两点不同:

  • 第二个有两个不同的生命期,第一个只有一个。
  • 第二个函数的生存期是early-bound,第一个函数的生存期是后期绑定的,两者之间有一些区别,主要的区别是你不能创建一个早期绑定生存期的HRTB函数指针(let f: fn(&i32) -> &i32 = foo2;不能编译)。

您几乎总是需要(1),因为它不太冗长,并且允许HRTB。
2.
生命周期是最小的。忽略问题1中的点,这与以下等式相同:

fn foo<'a, 'b: 'a, 'c: 'a>(x: &'b i32, y: &'c i32) -> &'a i32 {
    ...
}

相关问题