为什么生存期规则偏向于字符串文字?

时间:2018-09-27 03:50:13

标签: rust

该代码段无法编译,因为结构A实例在其字段s2中所拥有的引用s比其生存时间更长。没问题。

struct A<'a> {
    s: &'a usize,
}

let s1 = 100;

let mut a = A { s: &s1 };

{
    let s2 = 1000;

    a.s = &s2;
}

在与字符串文字相同的情况下,它会编译。为什么?

struct A<'a> {
    s: &'a str,
}

let s1 = "abc";

let mut a = A { s: &s1 };

{
    let s2 = "abcd";

    a.s = &s2;
}

1 个答案:

答案 0 :(得分:5)

根据 Rust编程语言all string literals have the special 'static lifetime

因此,在您的示例中,您有一个A<'static>,并且正在更改它所持有的&'static str