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

为何可同时传递u32类型的可变与不可变引用?

为什么你的Rust代码没触发可变/不可变引用冲突?

你没遗漏核心要点,只是没注意到Rust借用规则里的**「同一时间」这个关键前提:Rust禁止的是同一作用域内同时存在一个可变引用和任意不可变引用**,而你的代码里两个引用的生命周期根本没重叠。

具体来说:

  • 调用do_something(&mut num)时,可变引用仅在函数执行期间存在,函数执行完毕后这个可变引用就被立即销毁了。
  • 之后调用dont_do_anything(&num)时,才创建新的不可变引用,此时没有任何可变引用存活,完全符合借用规则,自然不会报错。

如果把代码改成下面这样,让两个引用的生命周期重叠,就会触发编译器错误:

fn main() {
    let mut num = 69;
    let mut_ref = &mut num; // 可变引用存活
    let immut_ref = #   // 此时尝试创建不可变引用,直接报错
    do_something(mut_ref);
    dont_do_anything(immut_ref);
}

fn dont_do_anything(num: &u32) {
    println!("{}", num);
}

fn do_something(num: &mut u32)  {
    *num += 1;
}

内容的提问来源于stack exchange,提问作者Karan Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:52:02