MST

星途 面试题库

面试题:Rust中结构体移动语义的基础理解

请阐述Rust结构体移动语义在以下代码中的具体表现:```ruststruct Point { x: i32, y: i32}fn main() { let p1 = Point { x: 10, y: 20 }; let p2 = p1; // 在这里尝试使用p1会发生什么,为什么?}```
40.6万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. 移动语义表现
    • 在Rust中,当执行let p2 = p1;时,p1的所有权被移动到了p2
    • 结构体Point本身没有实现Copy trait(默认情况下,只有包含实现了Copy trait的成员的简单结构体才会自动派生Copy),所以这里发生的是移动语义。
  2. 尝试使用p1的结果及原因
    • 如果在let p2 = p1;之后尝试使用p1,会导致编译错误。
    • 原因是所有权已转移给p2p1不再拥有数据,使用p1就像使用一个无效的变量,这不符合Rust的内存安全规则。例如,若尝试在之后添加println!("p1 x: {}", p1.x);,编译器会报错,提示p1已被移动,无法再使用。