鑑於這種代碼:爲了存儲引用'&'a T`,爲什麼需要綁定`T:'a`?
struct RefWrapper<'a, T> {
r: &'a T,
}
...編譯器會抱怨:
error: the parameter type
T
may not live long enoughconsider adding an explicit lifetime bound
T: 'a
so that the reference type&'a T
does not outlive the data it points at.
我已經看到了這個錯誤已經多次,到目前爲止,我只是聽取了編譯器,一切都制定了罰款。但是,多想一想,我不明白爲什麼我要寫T: 'a
。
據我瞭解,這是已經不可能得到這樣的參考。有&'a T
意味着有一個T
類型的對象至少生存'a
。但是我們不能在所述對象中存儲任何指向壽命比'a
短的數據。這會已經導致編譯器錯誤。
從這個意義上說,已經不可能得到&'a T
,其中T
沒有超過'a
。因此,額外註釋(T: 'a
)不應該是必需的。
對嗎?我錯了,如果是的話:如果T: 'a
將不需要?我怎麼能破壞代碼?
鏈接:
我問#rust,似乎[此代碼](https:// github。com/rust-lang/rust/issues/24622#issuecomment-94761287)如果解除了'T:'a'要求,將會破壞事情。但我並不真正瞭解這些代碼,現在我將停止嘗試。希望能夠理解這個問題的人在此期間得到答案^ _^ –
[https://github.com/rust-lang/rfcs/pull/2093](https://github.com/rust-lang/rfcs/pull/2093) –