有没有办法选择两个生命周期中较小的一个?

问题描述 投票:12回答:1

我的意思是:

fn minimum<'a, 'b>(x: &'a mut i32, y: &'b mut i32) -> &'min(a, b) mut i32 {
    (x < y) ? x : y
}

我们不知道在生命周期中将选择哪个引用,但编译器知道两个引用在哪个范围内仍然有效,并且可以安全地使用返回的引用。

可以提及的解决方法:

fn minimum<'a, 'b> where 'b: 'a (x: &'a i32, y: 'b i32) -> &'a i32 {
    (x < y) ? x : y
}

实际上并不是解决方案,因为在调用函数时我们必须处理这两种情况:当'a: 'b'b: 'a

rust lifetime
1个回答
9
投票

当您有一个统一的生命周期时,这就是编译器自动执行的操作:

fn minimum<'a>(x: &'a mut i32, y: &'a mut i32) -> &'a mut i32 {
    if x < y { x } else { y }
}

这是唯一的内存安全选项,因为函数的实现可能会选择任一引用。

没有“最大”等价物,因为使用它不能保证记忆安全。

也可以看看:

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.