【发布时间】:2017-06-07 06:44:48
【问题描述】:
鉴于此代码:
struct RefWrapper<'a, T> {
r: &'a T,
}
...编译器抱怨:
错误:参数类型
T的寿命可能不够长考虑添加一个显式的生命周期绑定
T: 'a,这样引用类型&'a T的寿命就不会超过它指向的数据。
我已经多次看到这个错误,到目前为止,我只是听了编译器,一切正常。不过想多了,我不明白为什么一定要写T: 'a。
据我了解,已经不可能获得这样的参考。拥有&'a T 意味着有一个T 类型的对象至少存在'a。但是我们不能在所述对象中存储任何指向生命周期比'a 更短的数据的引用。这将已经导致编译器错误。
从这个意义上说,已经不可能得到一个&'a T,而T 的寿命不超过'a。因此不需要额外的注释 (T: 'a)。
我说的对吗?我错了吗,如果是的话:如果不需要T: 'a,我怎么能破解代码?
链接:
【问题讨论】:
-
我在#rust 上问过,如果取消
T: 'a的要求,似乎this code 会破坏事情。但我还没有真正理解该代码,我现在将停止尝试。希望了解问题的人同时回答^_^