generated at
変数代入時のsemantics


2つのsemanticsがある


同じsyntaxなのに、意味(挙動)が異なるので、これはsemanticsの話
同じ let p2 = p1 というsyntaxでも
moveされたり、copyされたり、意味(挙動)が変わる
p1 Copy traitを実装しているかどうかで変わる


rs
#[derive(Debug)] struct Point { x: i32, y: i32, } fn main() { let p1 = Point { x: 1, y: 2 }; let p2 = p1; // 所有権がp1からp2にmove println!("{:?}", p2); // OK: p2は所有権を持っている println!("{:?}", p1); // NG: p1はムーブされたため使用できない }
rs
#[derive(Debug, Copy, Clone)] // Copyを実装 struct Point { x: i32, y: i32, } fn main() { let p1 = Point { x: 1, y: 2 }; let p2 = p1; // (moveではなく)値のコピーが発生 println!("{:?}", p1); // OK: p1はまだ有効 (所有権は失われない) println!("{:?}", p2); // OK: p2はp1のコピー }