为什么我的隐式可复制变量会被移动?

4
根据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; //Error: p has been moved p1
}

编译错误显示:
note: `p` moved here because it has type `Point`, which is moved by default

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

我更新了您的标题,以表明问题与“可隐式复制”的结构有关。由于这些结构已不再存在,我预计会有更多人提出同样的问题。 - Shepmaster
1个回答

10

复制现在必须显式添加,指南尚未更新:

#[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.
}

为什么,如果Point是可复制的,那么对于给p2赋值会出错?这不只是创建另一个副本吗? - Drew Noakes
@DrewNoakes 我在编写示例时忘记删除错误注释了。 - Arjan
感谢您的跟进。现在更有意义了 :) - Drew Noakes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接