2009-02-25

インクリメント演算子の謎

 インクリメント演算子は、どうも言語によってかなり扱いが違うことに気がついた。

後置インクリメント

まず、実行しようと思うコードの擬似表現は以下。このコードを実行すると、どのような結果が出力されるだろうか? まずは頭の中で考えてほしい。

なお、「a++」の部分は「後置インクリメント」と呼ばれ、式自体の評価値はインクリメント前の値になる。つまり、「a++」の評価値はいずれの言語でも1になる。

a = 1;
print (a + a++);

計算し終わっただろうか。では上記コードを各種言語で実行した場合の結果を見てみよう。

言語間で結果が違うことがわかるだろう。まずは、なぜこれらの言語間で結果が違うのか、納得のいく説明を考えてほしい。

前置インクリメント

考え終わったら次の実験をしてみよう。

次は、後置インクリメントではなく前置インクリメントを使ってみる。つまり、下記のようなコードである。

なお「++a」は、計算後の値が評価値になるため、いずれの言語でも2と評価される。

a = 1;
print (a + ++a);

 こちらも、各種言語で実行した結果を見てみよう。

 さて、後置インクリメントの結果を見て考えた「納得のいく説明」は、こちらでも通用しただろうか。

見出しの前置と後置が逆だったので修正しました

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん