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回適用しただけの(何もしない)式として静かにコンパイルが通ってしまう、という有名な罠があります。