首页 > 解决方案 > 为什么生命周期规则有利于字符串文字?

问题描述

此代码段无法编译,因为 structA实例的寿命超过了s2它在其 field 中保存的引用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;
}

标签: rust

解决方案


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

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


推荐阅读