+ 'a lifetime语法在rust中做什么?

odopli94  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(104)
Self: Sized + 'a

字符串
或者是

T: T + 'a


在遵循教程时看到了这个语法,该教程建议使用rust 2018版本而不是2021,如果它与您的答案有关。但是,我找不到+ lifetime parameter语法的含义。

f45qwnt8

f45qwnt81#

这意味着泛型中使用的任何类型都必须比'a更长寿,这意味着它包含的所有引用都必须比'a更长寿。这里有一些类型,将永远工作。

i32                 // contains no lifetimes, so all zero lifetimes outlive 'a
Vec<u8>             // same as above
&'static str        // 'static outlives all lifetimes
SomeStruct<'static> // same as above

字符串
下面是一些只有在其生存期超过'a时才有效的类型。

Vec<&'b u8>               // 'b must outlive 'a
&'c str                   // 'c must outlive 'a
SomeStruct<'d>            // 'd must outlive 'a
AnotherStruct<'x, 'y, 'z> // all lifetimes must outlive 'a


这最常用于+ 'static,这意味着“所有包含的生存期必须是'static”。你也可以在trait对象上看到它,比如Box<dyn Error + 'a>impl Trait类型,比如impl Iterator<Item = u8> + 'a,它的意思是“这个类型只存在于'a”,就像一个常规的生命周期参数一样。
我不认为自2018年版以来有任何变化。

相关问题