从我自己的理解和实验来看,这似乎是真的,但我还没有找到一个权威的来源来证明它.Rust by Example有一个bounds的部分,上面写着:
T: 'a
:T
中的所有引用都必须超过生存期'a
.#[derive(Debug)] struct Ref<'a, T: 'a>(&'a T); // `Ref` contains a reference to a generic type `T` that has // an unknown lifetime `'a`. `T` is bounded such that any // *references* in `T` must outlive `'a`. Additionally, the lifetime // of `Ref` may not exceed `'a`.
然而,这看起来像是一个糟糕的演示,因为T: 'a
的界限似乎并不影响Ref
的行为.我试图构建一个短于'a
的T
的任何try ,无论有没有T: 'a
都会受阻.更重要的是,定义without生命周期 界限的通用引用可以被伪装成with它:
fn f<'a, T>(r: &'a T) {
g(r) // this compiles
}
fn g<'a, T: 'a>(r: &'a T) {
// ...
}
在第generic parameters节(struct Ref<'a, T> where T: 'a { r: &'a T }
)中的一些例子中,铁 rust 参考文献有类似的 struct ,但它没有详细说明.我已经翻阅了那里的文档,那些关于参考文献和生命周期的文档,但找不到链接.
那么,&'a T
意味着T: 'a
吗?如果是,这是在哪里记录的?为什么这些资源会有这种不必要的限制?如果没有,规则是什么?