ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
増分すること。プログラミングに於いては、ある変数の値を一つ増やすことをいう。
インクリメントには、前置インクリメントと後置インクリメントがある。
Cの場合、演算順序以外に違う点はない。出力されるバイナリも同じはずである(コンパイラーによる)。
一方、C++には演算子のオーバーロードという機能があり、これにより演算子の動作の定義が可能で、このために前置と後置で動作が変わってくる。
例えば、int型変数をリミッター付きでインクリメントする演算子を定義する場合、次のようにする。
// 前置インクリメント ++n Number& Number::operator++() { if (this->num < INT_MAX) { this->num++; } return *this; } // 後置インクリメント n++ Number Number::operator++(int) { Number n = *this; if (this->num < INT_MAX) { this->num++; } return n; }
どちらもメンバー変数numをインクリメントする処理だが、前置と後置では内部の処理が違っている。
前置の場合は、その結果を返すことになるが、後置の場合はそうではなく、インクリメント前の結果を返さなければならない。
この場合、内部動作として、前置インクリメントの処理は単に*thisつまりインスタンス自体を返せば済むが、後置インクリメントの場合、あらかじめ処理前のインスタンスのコピーを内部で生成しておき、最後に処理前のインスタンスのコピーを返さなければならない。
結果としてC++では、前置と後置を比較すると前置の方が無駄な処理が少なく高速になる。
Cでは後置が多かったが、この理由によりC++では前置が使われることが多い。
なお、これはインクリメントに限らず、デクリメントでも同様である。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます