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