20

for私の興味はとwhileループの違いです。ポストインクリメント値が使用されてからインクリメントされ、操作が一定のプリインクリメントを返すことを知っています。

while (true) {
    //...
    i++;
    int j = i;
}

ここで、ループの最後にj古いものiまたはポストインクリメントが含まれますか?i

4

8 に答える 8

24

理解のための基本的な答え。インクリメント演算子は次のように機能します。

// ++i
function pre_increment(i) {
    i += 1;
    return i;
}
// i++
function post_increment(i) {
    copy = i;
    i += 1;
    return copy;
}

優れたコンパイラは、戻り値が使用されないことを検出すると、i++自動的に置き換えます。++i

于 2015-12-10T09:30:39.790 に答える
6

プレインクリメントでは、初期値が最初にインクリメントされ、次に式の中で使用されます。

a = ++i;

この例では、変数の値iが 5であると仮定します。変数の値は式で使用する前に変更されるaため、変数の値は 6 になります。i

ポストインクリメント値は、最初に式で使用され、次にインクリメントされます。

a = i++;

この例では、変数の値が 5 であると仮定します。変数の値iは5 になります。これは、値 5 を に代入した後にのみ のaiがインクリメントされるためですa

于 2013-06-28T14:58:45.240 に答える
0

ポストインクリメントとプリインクリメントの違いは、実際には多くの場合微妙です。ポストインクリメネット、別名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常に機能するとは限らず、プレインクリメントと同等です)。適切なインクリメントを使用すれば、多くの問題が解決されます。

于 2016-08-05T17:49:34.973 に答える