Namaran

Code daily. Without assist.

2026-08-27

increment.rs

fn main() {
    let mut i = 0;
    i++;
    println!("{}", i);
}

これはコンパイルできるでしょうか?

Answer

いいえ、コンパイルできません。Rustには++/--という前置・後置のインクリメント・デクリメント演算子がそもそも存在せず、i++;は構文エラーになります。値を1増やすにはi += 1;と書きます。C/C++/Java/JavaScriptにはおなじみのこの演算子を、Rustが意図的に採用しなかったのは、代入と読み取りが1つの式に紛れ込み、前置か後置かで結果が変わる(そしてCではときに未定義動作にすらなる)という副作用のわかりにくさを避けるためです。ちなみにPythonにも++/--はありませんが、Rustと違って++iという記述自体は構文エラーにならず、単項+を2回適用しただけの(何もしない)式として静かにコンパイルが通ってしまう、という有名な罠があります。