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

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);
主站蜘蛛池模板: 县级市| 东乌珠穆沁旗| 林口县| 霸州市| 江源县| 司法| 塔城市| 孟连| 阿尔山市| 鸡泽县| 玉屏| 衡山县| 安阳市| 七台河市| 隆林| 龙里县| 天等县| 鹿邑县| 林西县| 同德县| 娄底市| 梅河口市| 新巴尔虎左旗| 本溪| 铅山县| 鄂温| 赤水市| 东乌珠穆沁旗| 潞西市| 铜山县| 临桂县| 鹿泉市| 神农架林区| 佛学| 阿拉善左旗| 札达县| 静乐县| 太湖县| 鸡泽县| 闽侯县| 赤峰市|