gpt4 book ai didi

generics - 通过其自身的通用生命周期(trait Bar <'a>: ' a)来限制特征是什么意思?

转载 作者:行者123 更新时间:2023-12-03 11:26:49 24 4
gpt4 key购买 nike

我在the official reference中看到过这种代码:

trait Bar<'a>: 'a { }

我还没有想过这种情况。

我直观地解释类型的“生命周期绑定(bind)”如下:

some_reference: &'a Some_Type = &instance_of_Some_Type;
T: 'a // T is borrowed by "instance_of_Some_Type"

trait Bar<'a>: 'a { } 是什么意思? — 有一种方法使用借用类型的参数吗?

和这个一样吗?

impl Bar<'a> for Another_Type
where
Another_Type: 'a
{
}

我想不出上面蕴涵的用法,这个例子的用法是什么?我很难理解“性状的生命周期参数”的含义。

最佳答案

特征上的生命周期是关于实现该特征的某种类型内部的引用。

例如,'static生命周期绑定(bind)在特征上意味着它不能由任何包含不超过 'static 的引用的结构实现。 .

让我们以没有生命周期限制的例子为例:

trait Bar<'a> { }

这是一个基于生命周期的参数化特征 'a , 但没有要求这个实现实际上比 'a 长,所以我们可以这样做:

struct HasRef<'b>(&'b i32);
impl Bar<'static> for HasRef<'_> { }

上面写着任何 HasRef struct - 即使是生命周期很短的结构 - 实现了 Bar<'static>特质。

改写

trait Bar<'a>: 'a { }

表示任何实现 Bar<'a> 的类型必须至少活到'a ,这可能更有意义。

(这些边界对于 trait 对象(类型如 dyn Trait )尤其重要,因为只有 trait 本身才能让编译器了解此 trait 对象内引用的生命周期。)

关于generics - 通过其自身的通用生命周期(trait Bar <'a>: ' a)来限制特征是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65598011/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com