官术网_书友最值得收藏!

Copy types

Some types are not moved when we assigned a value of these types to another variable. This is the case for basic types such as integers. For instance, the following code is perfectly valid:

let num1 = 42;
let num2 = num1;
println!("{}", num1);

We can still use num1 even thought we assigned it to num2. This is because the basic types implement a special marker: Copy. Copy types are copied instead of moved.

We can make our own types Copy by adding derive to them:

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

Since Copy requires Clone, we also implement the latter for our Point type. We cannot derive Copy for a type containing a value that does not implement Copy. Now, we can use a Point without having to bother with references:

fn print_point(point: Point) {
    println!("x: {}, y: {}", point.x, point.y);
}

let p1 = Point { x: 1, y: 2 };
let p2 = p1;
print_point(p1);
println!("{}", p1.x);
主站蜘蛛池模板: 尚义县| 濮阳市| 张家界市| 通州区| 囊谦县| 洛阳市| 西吉县| 乌兰浩特市| 山阴县| 乐至县| 台南市| 微山县| 张家川| 台前县| 思茅市| 河北区| 闸北区| 封开县| 盐源县| 正阳县| 始兴县| 莱西市| 德庆县| 武陟县| 濉溪县| 新昌县| 丰镇市| 五峰| 临武县| 泰兴市| 河东区| 泽库县| 山东省| 凤翔县| 新田县| 鄂温| 鹤峰县| 文安县| 榆林市| 随州市| 商洛市|