Rust 为什么要移动我的隐式可复制变量?
根据撰写本文时的报告: 对于包含实现特殊trait Drop的拥有指针或值的类型,将移动变量。将复制所有其他类型 下面是我的代码。我希望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
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在编写示例时,我忘了删除错误注释。感谢您的跟进。现在更有意义了:)