MST
星途 面试题库

面试题:Rust字符串:所有权与借用

在Rust中,有一个字符串 `let s1 = String::from("hello");`,如果想定义一个函数接收这个字符串并打印,但又不想转移所有权,应该如何实现?请写出函数定义和调用的代码,并解释其中涉及的所有权和借用概念。
13.2万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
fn print_string(s: &str) {
    println!("The string is: {}", s);
}

fn main() {
    let s1 = String::from("hello");
    print_string(&s1);
}
  • 所有权:在Rust中,每个值都有一个变量作为其所有者。当变量离开其作用域时,该值将被释放。例如,在main函数中,s1String类型字符串的所有者,当main函数结束时,s1所拥有的字符串会被释放。
  • 借用:为了在不转移所有权的情况下使用值,Rust引入了借用机制。在上述代码中,print_string函数的参数s是一个借用。&str表示对字符串切片的引用,通过&s1s1的引用传递给print_string函数。借用允许函数使用值,但不拥有该值,这样函数结束后,原所有者s1仍然可以继续使用该字符串。借用遵循一些规则,如在同一时间,要么只能有一个可变引用,要么可以有多个不可变引用,这有助于防止数据竞争。