MST

星途 面试题库

面试题:Rust中可变引用与不可变引用在函数参数中的区别及应用场景

请简述在Rust函数参数中使用可变引用与不可变引用有何区别,并举例说明在哪些实际场景下会分别使用它们。
48.3万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

区别

  1. 不可变引用:使用&符号声明,保证在借用期间不会对被引用的数据进行修改。多个不可变引用可以同时存在,因为它们不会改变数据,这有助于实现数据的共享访问,符合 Rust 的所有权系统中“共享不可变”原则。
  2. 可变引用:使用&mut符号声明,允许在借用期间对被引用的数据进行修改。但在同一时刻,只能有一个可变引用存在(除了Copy类型),以避免数据竞争,这遵循 Rust 所有权系统中“可变独占”原则。

实际场景举例

  1. 不可变引用场景: 常用于需要读取数据但不修改数据的函数。例如计算字符串长度的函数:
fn calculate_length(s: &str) -> usize {
    s.len()
}

这里calculate_length函数只需要读取字符串的内容来计算长度,不需要修改字符串,所以使用不可变引用&str

  1. 可变引用场景: 常用于需要修改数据的函数。例如向数组中添加元素的函数:
fn add_element(vec: &mut Vec<i32>, element: i32) {
    vec.push(element);
}

add_element函数中,需要修改Vec<i32>,所以使用可变引用&mut Vec<i32>