该代码段无法编译,因为结构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;
}
答案 0 :(得分:5)
根据 Rust编程语言,all string literals have the special 'static
lifetime。
因此,在您的示例中,您有一个A<'static>
,并且正在更改它所持有的&'static str
。