for
私の興味はとwhile
ループの違いです。ポストインクリメント値が使用されてからインクリメントされ、操作が一定のプリインクリメントを返すことを知っています。
while (true) {
//...
i++;
int j = i;
}
ここで、ループの最後にj
古いものi
またはポストインクリメントが含まれますか?i
for
私の興味はとwhile
ループの違いです。ポストインクリメント値が使用されてからインクリメントされ、操作が一定のプリインクリメントを返すことを知っています。
while (true) {
//...
i++;
int j = i;
}
ここで、ループの最後にj
古いものi
またはポストインクリメントが含まれますか?i
理解のための基本的な答え。インクリメント演算子は次のように機能します。
// ++i
function pre_increment(i) {
i += 1;
return i;
}
// i++
function post_increment(i) {
copy = i;
i += 1;
return copy;
}
優れたコンパイラは、戻り値が使用されないことを検出すると、i++
自動的に置き換えます。++i
プレインクリメントでは、初期値が最初にインクリメントされ、次に式の中で使用されます。
a = ++i;
この例では、変数の値i
が 5であると仮定します。変数の値は式で使用する前に変更されるa
ため、変数の値は 6 になります。i
ポストインクリメント値は、最初に式で使用され、次にインクリメントされます。
a = i++;
この例では、変数の値が 5 であると仮定します。変数の値i
は5 になります。これは、値 5 を に代入した後にのみ のa
値i
がインクリメントされるためですa
。
ポストインクリメントとプリインクリメントの違いは、実際には多くの場合微妙です。ポストインクリメネット、別名num++
は、最初に のコピーを作成し、num
それを返し、その後、インクリメントします。一方、プレインクリメント、別名++num
は、最初に評価してから値を返します。最近のほとんどのコンパイラは、これをループで見ると、通常、ポスト インクリメントが使用され、返された初期値が使用されない場合に最適化します。微妙なバグが発生することがよくある 2 つのインクリメントの最も大きな違いは、インクリメントされた値を使用して変数を宣言する場合です。以下の例:
int num = 5;
int num2 = ++num; //Here, first num is incremented,
//then made 6, and that value is stored in num2;
もう一つの例:
int num = 5;
int num2 = num++; //Here, num is first returned, (unfortunately?), and then
//incremented. This is useful for some cases.
ここで最後に言いたいのは、BE CAREFUL WITH INCREMENTSです。変数を宣言するときは、適切なインクリメントを使用するか、すべてを書き出すようにしてください (num2 = num + 1
常に機能するとは限らず、プレインクリメントと同等です)。適切なインクリメントを使用すれば、多くの問題が解決されます。