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