簡體   English   中英

結構中的字符串,生命周期

[英]String in a struct, lifetime

我知道這3個結構之間的區別是什么-一生a

struct S1 {
    a: &'static str,
    b: int
}

struct S2<'aa> {
    a: &'aa str,
    b: int
}

struct S3 {
    a: String,
    b: int
}

fn main() {
    let s1 = S1 {a: "123", b: 123};
    let s2 = S2 {a: "123", b: 123};
    let s3 = S2 {a: "123".into_owned(), b: 123};
}

你能告訴我一個第一,第二和第三的用例,換句話說,什么時候使用第一個超過第二個和第三個,何時 - 第二個超過第一個和第三個等等? 在文檔中沒有解釋。

S1 :這只允許你使用字符串文字,或其他字符串與static (即它們永遠不能解除分配)的生命周期。

S2 :這允許您使用任意字符串切片,前提是它們具有可表達的生命周期。 例如,您無法從Iterator返回S2動態實例,因為無法表達所涉及的生命周期。 也就是說,這可以避免不必要的堆分配。

S3 :最通用的,因為它擁有其內容,但需要使用堆分配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM