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中,默认情况下是