You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

可变引用生命周期不变性:对Rustonomicon表述的疑问

Rustonomicon子类型与方差的理解疑惑

此外,我们发现不能将&mut &'a U视为&mut &'b U的子类型,因此可以说&mut T对T是不变的(重点为原文所加)。

上述结论源自以下示例:

fn assign<T>(input: &mut T, val: T) {
    *input = val;
}

fn main() {
    let mut hello: &'static str = "hello";
    {
        let world = String::from("world");
        assign(&mut hello, &world);
    }
    println!("{hello}"); // use after free 😿
}

该章节随后明确指出&mut &'a T对'a是协变的。基于示例,**难道不应说&mut &'a T对'a是不变的吗?**毕竟'static是'world的子类型,但&mut &'static str无法赋值给&mut &'world str,而“&mut T对T是不变的”结论似乎不成立。究竟是《Rustonomicon》有误,还是我的理解偏差?

更新:@kmdreko指出,《Rustonomicon》实际声称&'a mut T对'a是协变的,这与“&mut &'a T对'a是协变的”是不同概念。

内容的提问来源于stack exchange,提问作者Alessandro Power

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 00:58:12