面试题答案
一键面试- 所有权转移过程:
- 在Rust中,当
func1
创建String
类型的变量s
时,func1
获得s
的所有权。 - 当
s
作为参数传递给func2
时,所有权从func1
转移到func2
。这是因为Rust的所有权系统规定,一个值在同一时间只能有一个所有者。
- 在Rust中,当
func1
中s
传递后的使用情况:func1
中s
在传递后不能再使用。因为所有权已经转移给了func2
,func1
不再是s
的所有者。如果在func1
中尝试继续使用s
,编译器会报错,例如:
fn func1() {
let s = String::from("hello");
func2(s);
// 下面这行代码会报错,因为s的所有权已转移
println!("{}", s);
}
fn func2(s: String) {
println!("func2 got: {}", s);
}
在上述代码中,println!("{}", s);
这行代码会导致编译错误,提示s
可能已经被移动,因为所有权转移给了func2
。