MST

星途 面试题库

面试题:Rust中值所有权转移在函数调用场景下的体现

请举例说明在Rust中,当一个函数接收一个参数时,值所有权是如何转移的?并阐述这种转移对原变量的影响。同时编写一段代码展示该过程。
49.7万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. 值所有权转移示例及影响阐述
    • 在Rust中,当一个函数接收一个参数时,参数的所有权通常会转移给函数。例如,假设有一个字符串String类型的变量,当将其传递给一个函数时,函数就获得了该字符串的所有权。原变量在所有权转移后,就不能再使用了,否则会导致编译错误,因为Rust的所有权系统确保同一时刻只有一个所有者。
    • 比如,String类型在堆上分配内存,当所有权转移时,实际上是转移了对这块堆内存的控制权。
  2. 代码示例
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可能已经被移动。