面试题答案
一键面试区别
- 不可变引用:使用
&
符号声明,保证在借用期间不会对被引用的数据进行修改。多个不可变引用可以同时存在,因为它们不会改变数据,这有助于实现数据的共享访问,符合 Rust 的所有权系统中“共享不可变”原则。 - 可变引用:使用
&mut
符号声明,允许在借用期间对被引用的数据进行修改。但在同一时刻,只能有一个可变引用存在(除了Copy
类型),以避免数据竞争,这遵循 Rust 所有权系统中“可变独占”原则。
实际场景举例
- 不可变引用场景: 常用于需要读取数据但不修改数据的函数。例如计算字符串长度的函数:
fn calculate_length(s: &str) -> usize {
s.len()
}
这里calculate_length
函数只需要读取字符串的内容来计算长度,不需要修改字符串,所以使用不可变引用&str
。
- 可变引用场景: 常用于需要修改数据的函数。例如向数组中添加元素的函数:
fn add_element(vec: &mut Vec<i32>, element: i32) {
vec.push(element);
}
在add_element
函数中,需要修改Vec<i32>
,所以使用可变引用&mut Vec<i32>
。