MST

星途 面试题库

面试题:Rust多重借用限制的场景分析

请描述一个在Rust编程中,会触发多重借用限制的具体场景,并说明为什么会触发该限制。
34.6万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

触发多重借用限制的场景

假设有如下Rust代码:

fn main() {
    let mut s = String::from("hello");
    let r1 = &s;
    let r2 = &s;
    s.push_str(", world");
    println!("{}, {}", r1, r2);
}

触发原因

  1. 规则概述:在Rust中,对于可变引用(&mut),同一时间只能有一个可变引用存在,以保证数据的一致性。对于不可变引用(&),同一时间可以有多个不可变引用存在,但前提是不存在可变引用。
  2. 具体分析:上述代码中,let r1 = &s;let r2 = &s; 创建了两个不可变引用 r1r2。之后 s.push_str(", world"); 尝试对 s 进行修改,这需要一个可变引用。此时,因为已经存在不可变引用 r1r2,违反了Rust的借用规则,所以会触发多重借用限制错误。在Rust看来,同时存在不可变引用和对同一数据的修改操作可能会导致数据竞争和未定义行为,所以这种情况是不被允许的。