変数代入時のsemantics
2つのsemanticsがある
同じsyntaxなのに、意味(挙動)が異なるので、これはsemanticsの話
同じlet p2 = p1というsyntaxでも
moveされたり、copyされたり、意味(挙動)が変わる
code:rs
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はムーブされたため使用できない
}
code:rs
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のコピー
}