2026-08-21
ownership.rs
fn main() {
let s1 = String::from("namara");
let s2 = s1;
println!("{}", s1);
}
これはコンパイルできるでしょうか?できない場合、その理由は?
答え
できません。StringはCopyを実装していないため、let s2 = s1;はs1から所有権をムーブします。次の行で再びs1を使おうとすると、ムーブ済みの値を使用することになり、コンパイラはこれを拒否します:error[E0382]: borrow of moved value: `s1`。