从我个人的理解和实验来看,这似乎是正确的,但我还没有找到一个权威的来源来证明它。Rust by Example有一个bounds部分,在那里它说:
Rust参考手册中的一些示例在泛型参数部分(
那么,
然而,这看起来是一个糟糕的示范,因为
T: 'a
: All references inT
must outlive lifetime'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
,但无论是否有T:'a
,都会受到阻碍。更重要的是,定义一个没有生命周期约束的通用引用可以被当作具有生命周期约束的引用使用。fn f<'a, T>(r: &'a T) {
g(r) // this compiles
}
fn g<'a, T: 'a>(r: &'a T) {
// ...
}
Rust参考手册中的一些示例在泛型参数部分(
struct Ref<'a, T> where T: 'a { r: &'a T }
)中有类似的结构,但没有详细说明。我已经查阅了那里的文档,关于引用和生命周期的文档,但没有找到相关链接。那么,
&'a T
是否意味着T: 'a
?如果是这样,这在哪里有记录?为什么这些资源有这个不必要的约束?如果不是,规则是什么?
T
)在引用类型中没有使用T: 'a
约束时无法编译的例子。 - NawazT
,因为T: 'a
的约束存在于&'a T
的使用中。所以明确写出来与不写出来没有区别。 - kmdreko