Avatar ·

Rust中Copy和Clone trait的区别是什么?

我刚开始学习Rust,对Copy和Clone这两个trait感到困惑。它们似乎都能复制值,但编译器的行为却不同。 下面这个例子让我很困惑。我尝试复制一个结构体: ```rust struct Point { x: i32, y: i32, } fn main() { let p1 = Point { x: 10, y: 20 }; let p2 = p1; // 移动 let p3 = p1; // 错误:使用了已移动的值 } ``` 如果我加上`#[derive(Copy)]`,代码就能正常工作: ```rust #[derive(Copy, Clone)] struct Point { x: i32, y: i32, } ``` 但如果我只使用`Clone`,就必须显式调用`.clone()`: ```rust let p2 = p1.clone(); ``` 为什么会这样?什么时候该用Copy,什么时候该用Clone?它们之间根本的区别是什么?为什么Copy需要Clone(我看到它们在derive中经常一起出现)? 请像对新手一样解释一下。谢谢! <<>>

主要区别:移动语义 vs 复制语义

在Rust中,默认情况下是