为什么生命周期规则歧视字符串文字?

周汉成*_*周汉成 1 rust

此代码段不会编译,因为struct A实例比s2其在其字段中保存的引用更长s.没问题.

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

let s1 = 100;

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

{
    let s2 = 1000;

    a.s = &s2;
}
Run Code Online (Sandbox Code Playgroud)

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

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

let s1 = "abc";

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

{
    let s2 = "abcd";

    a.s = &s2;
}
Run Code Online (Sandbox Code Playgroud)

tur*_*too 5

根据Rust编程语言,所有字符串文字都具有特殊的'static生命周期.

所以在你的例子中你有一个A<'static>并且你正在改变&'static str它所拥有的.