MST

星途 面试题库

面试题:Rust内存模型之所有权转移

在Rust中,假设有两个函数`func1`和`func2`,`func1`创建一个字符串`String`类型的变量`s`,然后将`s`传递给`func2`。请描述在这个过程中所有权是如何转移的,并且说明`func1`中`s`在传递后是否还能使用,为什么?
47.0万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. 所有权转移过程
    • 在Rust中,当func1创建String类型的变量s时,func1获得s的所有权。
    • s作为参数传递给func2时,所有权从func1转移到func2。这是因为Rust的所有权系统规定,一个值在同一时间只能有一个所有者。
  2. func1s传递后的使用情况
    • func1s在传递后不能再使用。因为所有权已经转移给了func2func1不再是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