Rust 生命週期bound用於泛型的引用

2021-08-09 10:28:54 字數 974 閱讀 3397

在實際程式設計中,可能會出現泛型引用這種情況,我們會編寫如下的**:

struct inner<

'a, t>

會產生編譯錯誤:

error[e0309]: the parameter type

`t` may not live long enough

--> src/main.rs:16:5

|15 | struct inner<

'a, t>

struct object<

'a>

impl<

'a> print for object<'a>

", self.data);}

}struct inner<

'b, t: 'b + print>

fn main()

; let inner = inner

; inner.a.

output()

;}}

對於生命週期bound,可以結合trait bound來理解。rust的泛型有個特點就是trait boundtrait bound可以對泛型進行某些限制(只有實現了指定trait的型別才符合要求)。同樣,我們也可以像泛型那樣為生命週期引數增加限制,這被稱為「生命週期bound」(lifetime bounds)。生命週期bound幫助rust編譯器驗證泛型的引用不會存在的比其引用的資料更久。

上面的**中,struct inner<'b, t: 'b + print>這行**就是表示對泛型t同時進行trait bound和生命週期bound。

rust通過生命週期引數註解引用來幫助編譯器理解不同引用的生命週期如何相互聯絡。從而使編譯器能夠判斷引用是否有效。

rust 生命週期2

之前定義的結構體,都是不含引用的。如果想定義含引用的結構體,請定義生命週期註解 warn unused variables struct importantexcerpt a fn main 這個結構體有乙個字段,part,它存放了乙個字串 slice,這是乙個引用。類似於泛型引數型別,必須在結構體...

rust腐竹是什麼意思 Rust生命週期

不同於rust中的泛型引數,程式設計師是可以手動指定的。rust的生命週期是不能手動指定的,需要編譯器根據傳入的引數進行推斷。當編譯器在某條語句上不能根據引數進行推斷時,他會繼續往下執行並推斷生命週期引數。編譯器會持續根據語句上下文推斷出生命週期引數,並選擇最小的那個。struct context ...

Rust筆記 Rust中的生命週期之協變

生命週期代表資源的可用時期。顯式生命週期標記是泛型引數的一種,但是有協變的概念。長生命週期作為短生命週期的子型別 宣告乙個變數,其生命週期開始,變數離開作用域,其生命週期結束。生命週期標記是一種泛型引數,標記的型別 僅當與引用 借用 相關聯時。多數情況下生命週期標記可以由編譯器為我們推導並標註。一些...