面试题答案
一键面试- 值所有权转移示例及影响阐述:
- 在Rust中,当一个函数接收一个参数时,参数的所有权通常会转移给函数。例如,假设有一个字符串
String
类型的变量,当将其传递给一个函数时,函数就获得了该字符串的所有权。原变量在所有权转移后,就不能再使用了,否则会导致编译错误,因为Rust的所有权系统确保同一时刻只有一个所有者。 - 比如,
String
类型在堆上分配内存,当所有权转移时,实际上是转移了对这块堆内存的控制权。
- 在Rust中,当一个函数接收一个参数时,参数的所有权通常会转移给函数。例如,假设有一个字符串
- 代码示例:
fn main() {
let s = String::from("hello");
take_ownership(s);
// 下面这行代码会编译错误,因为s的所有权已经转移给了take_ownership函数
// println!("{}", s);
}
fn take_ownership(s: String) {
println!("函数接收所有权: {}", s);
}
在上述代码中,main
函数创建了一个String
类型的变量s
,然后将s
传递给take_ownership
函数,此时s
的所有权转移到了take_ownership
函数中,main
函数中不能再使用s
。如果取消注释println!("{}", s);
这行代码,编译时会报错,提示s
可能已经被移动。