结构中的字符串,寿命

アレッ*_*ックス 5 rust

我知道这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};
}
Run Code Online (Sandbox Code Playgroud)

您能告诉我第一种,第二种和第三种的用例吗,换句话说,什么时候最好在第二种和第三种上使用第一种,什么时候在第一种和第三种上使用-第二种,等等?在文档中没有解释。

DK.*_*DK. 5

S1:这仅允许您使用字符串文字或具有static使用寿命(即永远无法释放)的其他字符串。

S2:这允许您使用任意字符串切片,只要它们具有可表示的生命周期。例如,您无法S2从返回动态实例Iterator,因为无法表达所涉及的生命周期。也就是说,这可以避免不必要的堆分配。

S3:最通用,因为它拥有其内容,但是需要使用堆分配才能使用。

  • `S2` 是性能最好的,`S1` 一样快,更容易推理,但限制更多,`S3` 最慢,但很容易推理。如果可以,请使用“S2”,如果必须,请使用“S1”/“S3”。如果你想要例子......只需找到字符串处理 Rust 代码并阅读它。我想不出任何简短而不是无用的人为设计的东西。 (3认同)