LoginSignup
5
1

More than 3 years have passed since last update.

Rustでは++すら許されない

Last updated at Posted at 2020-07-15

を受けて。そもそも ++ 要るのか?というお話です。

Rustに限らずモダン言語だと ++ を許さないやつ結構多いです。Pythonとか。

Rust
fn main() {
    let mut i = 0;
    // コンパイルエラー
    // i++;
    // ++i;
    // こう書かなければならない
    i += 1;
    println!("{}", i);
    // i += 1 の返り値は () なので以下もコンパイルエラー。
    // println!("{}", (i += 1));
    // 以下はOK (++i相当)
    println!("{}", {
        i += 1;
        i
    });
    // 少し回りくどい (i++相当)
    println!(
        "{}, {}",
        {
            let res = i;
            i += 1;
            res
        },
        i
    );
}

そもそもRustは mut をつけてものを書くということ自体避けるので上のようなコードを書くことはほぼありえないでしょう。(つまりタイトルでRustの名前をお借りしたということですごめんなさい)

以下に示すようなC言語コードの未規定動作(要出典)の存在が原因でなくなったのだと思います。僕自身がよくやらかすので残しておきます。

c
#include <stdio.h>

void func(int a, int b, int c) {
  printf("a = %d, b = %d, c = %d\n", a, b, c);
}

int main() {
  int i = 0;
  // 0, 1, 1 を期待
  func(i, ++i, i++);

  return 0;
}

実際の出力は環境依存です。(確認できた環境では右から評価されるらしく 2, 2, 0 になりました)

そもそも ++ 演算子は可読性も良くない気がします。自分はC言語でも i++ はforループの更新文以外では書かない流派に改宗しました。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1