Rust 为什么要移动我的隐式可复制变量?

Rust 为什么要移动我的隐式可复制变量?,rust,Rust,根据撰写本文时的报告: 对于包含实现特殊trait Drop的拥有指针或值的类型,将移动变量。将复制所有其他类型 下面是我的代码。我希望Point是可复制的类型。但是它正在移动,下面的代码将不会使用0.13.0-nightly编译 struct Point { x: uint, y: uint } fn main() { let p: Point = Point{x: 10u, y: 10u}; let p1 = p; let p2 = p; //Er

根据撰写本文时的报告:

对于包含实现特殊trait Drop的拥有指针或值的类型,将移动变量。将复制所有其他类型

下面是我的代码。我希望
Point
是可复制的类型。但是它正在移动,下面的代码将不会使用0.13.0-nightly编译

struct Point {
    x: uint,
    y: uint
}

fn main() {
    let p: Point = Point{x: 10u, y: 10u};

    let p1 = p;
    let p2 = p; //Error: p has been moved p1
}
编译错误状态为:

note: `p` moved here because it has type `Point`, which is moved by default

为什么
Point
不被视为可复制类型

现在必须明确添加副本,指南尚未更新:

#[derive(Copy)]
struct Point {
    x: uint,
    y: uint
}

fn main() {
    let p: Point = Point{x: 10u, y: 10u};

    let p1 = p;
    let p2 = p; // Now works because it is Copy.
}

我更新了您的标题,以表明问题与“隐式可复制”结构有关。由于这些已经不存在,我希望更多的人会有同样的问题。如果
是可复制的,那么分配给
p2
会有错误吗?这不是在创建另一个副本吗?@DrewNoakes在编写示例时,我忘了删除错误注释。感谢您的跟进。现在更有意义了:)