MST
星途 面试题库

面试题:Rust中引用标记在函数参数传递场景的应用

在Rust中,假设有一个函数需要处理一个字符串,为了避免不必要的复制,我们使用引用传递。请写出一个函数,接收一个字符串切片引用作为参数,并返回该字符串的长度。同时解释为什么这里使用引用标记,以及它在这种场景下如何确保内存安全。
33.6万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
fn string_length(s: &str) -> usize {
    s.len()
}

在这种场景下使用引用标记&,原因在于:

  • 避免不必要的复制:如果直接传递字符串String,每次传递时都会进行所有权转移或者复制(取决于传递方式),这会消耗额外的内存和时间。而传递字符串切片引用&str,只是传递了一个指向字符串数据的指针和长度信息,不会发生数据的复制,大大提高了效率。
  • 确保内存安全:Rust通过所有权和借用规则来保证内存安全。使用引用时,编译器会确保在同一时间内,要么只能有一个可变引用(可用于修改数据),要么可以有多个不可变引用(用于只读操作)。在这个函数中,我们使用的是不可变引用&str,这意味着在函数内部不会对传入的字符串进行修改,并且可以与其他不可变引用同时存在,从而避免了数据竞争和悬空指针等内存安全问题。