类型具有静态生命周期意味着什么?
What does it mean for a type to have a static lifetime?
我理解借用、特征或结构拥有生命周期意味着什么,但我不明白为什么一个类型会有生命周期。我对类型的理解是它们是在编译时使用的抽象,它们根本不需要存在于二进制文件中。例如,一个包含两个整数的结构、一个包含两个整数的元组和一个包含两个整数的固定大小数组在编译时都应该映射到内存中相同的值排列,并且代码将使用字节偏移来找到这两个值。如果我是对的,生命周期的概念根本不应该适用于类型,所以下面两个结构是等价的:
pub struct Foo<T> {
foo: T
}
pub struct Bar<T: 'static> {
bar: T
}
除了等效之外,语法根本不存在。我一定是误解了什么,广泛的谷歌搜索没有帮助。类型生命周期的目的是什么,应该在什么时候使用它们?
T
可以承载比 'static
更短的生命周期。例如,T
可能是一些 &'a str
(对于一些 'a
),所以 Foo<T>
变成 Foo<&'a str>
,因此有一个绑定到 'a
, 可能比'static
.
短
第一个定义接受任何 T
并将在 其 生命周期内绑定到 T
。第二个定义说 T
不能包含短于 'static
的生命周期(T
可以是 &'static str
、String
或任何其他 'static
).
我理解借用、特征或结构拥有生命周期意味着什么,但我不明白为什么一个类型会有生命周期。我对类型的理解是它们是在编译时使用的抽象,它们根本不需要存在于二进制文件中。例如,一个包含两个整数的结构、一个包含两个整数的元组和一个包含两个整数的固定大小数组在编译时都应该映射到内存中相同的值排列,并且代码将使用字节偏移来找到这两个值。如果我是对的,生命周期的概念根本不应该适用于类型,所以下面两个结构是等价的:
pub struct Foo<T> {
foo: T
}
pub struct Bar<T: 'static> {
bar: T
}
除了等效之外,语法根本不存在。我一定是误解了什么,广泛的谷歌搜索没有帮助。类型生命周期的目的是什么,应该在什么时候使用它们?
T
可以承载比 'static
更短的生命周期。例如,T
可能是一些 &'a str
(对于一些 'a
),所以 Foo<T>
变成 Foo<&'a str>
,因此有一个绑定到 'a
, 可能比'static
.
第一个定义接受任何 T
并将在 其 生命周期内绑定到 T
。第二个定义说 T
不能包含短于 'static
的生命周期(T
可以是 &'static str
、String
或任何其他 'static
).