プレフィックスのインクリメントとデクリメント演算子: C++ --
++ unary-expression
–– unary-expression
解説
プレフィックスの ++ インクリメント演算子 () ではオペランドに 1 を加算します ; このインクリメントされた値は式の結果です。オペランドは 定数 型の左辺値でない場合があります。結果はオペランドと同じ型の左辺値です。
プレフィックスのデクリメント演算子 (--) プレフィックスのインクリメント演算子に似ていますがオペランドが 1 ずつデクリメントされます。その結果この一つの値です。
前置演算子は関数の引数に適用すると引数の値は関数に渡される前に増加または減少されることが保証されます。詳細についてはC++ 標準のセクション 1.9.17 を参照してください。
プレフィックスと後置インクリメントおよびデクリメント演算子はオペランドに影響します。その間の主な違いはインクリメントまたはデクリメント式の評価がの場合です。(詳細については後置インクリメントおよびデクリメント演算子 を参照してください)。プレフィックスのフォームでは値が式の評価で使用されるため式の値はオペランドの値と異なる前にインクリメントまたはデクリメントが発生します。後置形式では値が式の評価で使用されるため式の値はオペランドの値と同じですインクリメントまたはデクリメント後に発生します。たとえば次のプログラムは「 ++i = 6 」が出力されます :
// expre_Increment_and_Decrement_Operators.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main() {
int i = 5;
cout << "++i = " << ++i << endl;
}
整数または浮動の型が整数値 1. でインクリメントまたはデクリメントされます。結果の型はオペランドの型と同じです。ポインター アドレスの型のオペランドはオブジェクトのサイズによってインクリメントまたはデクリメントされます。次のオブジェクトへのポインターのインクリメントされた point; 前のオブジェクトにデクリメントされたポインターのポインター。
インクリメントとデクリメント演算子に副作用があるためプリプロセッサ マクロ のインクリメントまたはデクリメント演算子を含む式を使用して望ましくない結果を指定できます。次の例について考えます。
// expre_Increment_and_Decrement_Operators2.cpp
#define max(a,b) ((a)<(b))?(b):(a)
int main()
{
int i = 0, j = 0, k;
k = max( ++i, j );
}
マクロは配置 :
k = ((++i)<(j))?(j):(++i);
i が j 以上であるまたは 1 で j 未満の場合の各インクリメントします。
[!メモ]
C++ のインライン関数はここで説明したような副作用を削除する言語は完全な型チェックを実行しようとするためマクロによって多くの場合。