Namara

毎日コード。手助けなし。

2026-08-21

ownership.rs

fn main() {
    let s1 = String::from("namara");
    let s2 = s1;

    println!("{}", s1);
}

これはコンパイルできるでしょうか?できない場合、その理由は?

答え

できません。StringCopyを実装していないため、let s2 = s1;s1から所有権をムーブします。次の行で再びs1を使おうとすると、ムーブ済みの値を使用することになり、コンパイラはこれを拒否します:error[E0382]: borrow of moved value: `s1`