gpt4 book ai didi

generics - 当泛型类型受到泛型生存期的限制时,这意味着什么?

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

我正在研究Rust的一生。生存期由'a表示,可以像这样使用:

fn function1<'a>(param1: &'a str) -> &'a str
但是我发现了这段代码:
impl<'a, T: 'a> RingBuffer<'a, T> {
对我来说, T的类型为 'a毫无意义。类型和生命周期对我来说不是一回事。发生了什么?

最佳答案

当您看到通用类型参数后跟冒号和生存期时,表示生存期范围已放置在该类型上。

例如,如果您引用了:

impl<'a, T: 'a> RingBuffer<'a, T> {
T类型的生存时间至少应与生存期 'a一样长(请注意,编译器不知道T是什么-T本身可能包含引用或包含其他包含引用的类型)。

仔细查看 implementation of RingBuffer(我假设您在smoltcp箱子中找到了它),您会看到原因: RingBuffer可能包含对借用缓冲区的引用(通过 ManagedSlice)。这是有道理的:如果您使用堆栈分配的缓冲区创建 RingBuffer,则缓冲区的使用时间至少必须与 RingBuffer一样长。

在“旧书”的较旧版本中有一个标题为“ Advanced Lifetimes”的部分。我在较新的版本中找不到它,但是我发现它对理解这一点很有用。您可能还需要引用 rust 引用部分“ Trait and lifetime bounds

关于generics - 当泛型类型受到泛型生存期的限制时,这意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61884836/

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