面试题答案
一键面试措施
- 理解借用规则:
- Rust有三条借用规则:
- 同一时间内,一个可变引用(
&mut
)只能有一个,因为可变引用意味着对数据的修改,允许多个可变引用会导致数据竞争。 - 多个不可变引用(
&
)可以同时存在,但不能与可变引用同时存在。 - 引用的生命周期必须足够长,确保在引用使用时,被引用的数据仍然有效。
- 同一时间内,一个可变引用(
- Rust有三条借用规则:
- 分析变量生命周期:仔细分析每个变量的生命周期,确保在重排代码时,不会出现引用悬空(dangling reference)的情况,即引用指向的内存已经被释放。
- 避免重叠借用:重排操作要避免在同一作用域内创建重叠的借用。例如,不能在可变借用的同时创建不可变借用,除非可变借用的作用域已经结束。
代码示例
fn main() {
let mut numbers = vec![1, 2, 3];
let first = &numbers[0];
numbers.push(4);
println!("The first number is: {}", first);
}
上述代码会报错,因为在创建first
不可变引用后,又对numbers
进行了修改(push
操作),违反了借用规则。
重排思路和步骤
- 思路:
- 先完成对
numbers
的修改操作,然后再创建不可变引用,这样就不会违反借用规则。
- 先完成对
- 步骤:
- 将
numbers.push(4);
移动到let first = &numbers[0];
之前。 - 重排后的代码如下:
- 将
fn main() {
let mut numbers = vec![1, 2, 3];
numbers.push(4);
let first = &numbers[0];
println!("The first number is: {}", first);
}
这样,在创建first
不可变引用时,numbers
已经完成了修改操作,符合Rust的借用规则。