後置インクリメントおよびデクリメント演算子: ++
および --
構文
postfix-expression ++
postfix-expression --
解説
C++ には、前置および後置のインクリメント演算子およびデクリメント演算子が用意されています。このセクションでは、後置インクリメント演算子および後置デクリメント演算子についてのみ説明します (詳細については、「前置インクリメント演算子と前置デクリメント演算子」を参照してください。)2 つの間の違いは、後置表記法では演算子が "後置式" の後に表示されるのに対し、前置表記法では演算子が "式" の前に表示される点です。次の例は、後置インクリメント演算子を示しています。
i++;
後置インクリメント演算子 (++
) を適用する効果は、オペランドの値が適切な型の 1 単位分、増加することです。 同様に、後置デクリメント演算子 (--
) を適用する効果は、オペランドの値が適切な型の 1 単位分、減少することです。
後置のインクリメント式またはデクリメント式は、各演算子が適用される 前 に式の値が評価されることに注意してください。 インクリメントまたはデクリメント演算子は、オペランドが評価された 後 に適用されます。 この問題は、後置インクリメントまたはデクリメント演算が、より大きな式のコンテキストで行われる場合にのみ発生します。
後置演算子を関数の引数に適用した場合、引数の値が関数に渡される前にインクリメントまたはデクリメントされる保証はありません。 詳細については、C++ 標準のセクション 1.9.17 を参照してください。
long
型のオブジェクトの配列へのポインターに後置インクリメント演算子を適用すると、実際にはポインターの内部表現に 4 が加算されます。 この動作により、以前は配列の n 番目の要素を参照したポインターが今度は n+1 番目の要素を参照するようになります。
後置インクリメント演算子と後置デクリメント演算子のオペランドは、演算型またはポインター型の変更可能な (const
ではない) 左辺値である必要があります。 結果の型は postfix-expression の型と同じですが、左辺値ではなくなります。
Visual Studio 2017 バージョン 15.3 以降 (/std:c++17
モード以降で使用可能): 後置演算子またはデクリメント演算子のオペランドが bool
型ではない場合があります。
次のコードは、後置インクリメント演算子を示しています。
// expre_Postfix_Increment_and_Decrement_Operators.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main() {
int i = 10;
cout << i++ << endl;
cout << i << endl;
}
列挙型に対する後置インクリメント演算および後置デクリメント演算はサポートされていません。
enum Compass { North, South, East, West );
Compass myCompass;
for( myCompass = North; myCompass != West; myCompass++ ) // Error