2

C++ の入門クラスで、教授は今日、ループ、インクリメント、デクリメントについて話していました。単純な do-while ループが何回実行されるかを調べていたところ、次のコードの出力中に がint y最初に として表示されることに気付きましたが2、インクリメントの接尾表記が最初に使用され、教授も優先されます(x表示される変数のように)。では、最初に出力ウィンドウに" 1 3y " と表示されないのはなぜですか?

おそらく非常に簡単な答えですが、彼はすぐにはわかりませんでした。dev c++ の最新バージョンを使用していました。

#include <iostream>
using namespace std;

int main()
{
    int x=1;
    int y=1;

    do
    {
        cout << "x: " << " " << ++x << " " << x++ << endl;
        cout << "y: " << " " << y++ << " " << ++y << endl;
    }while(x<=10);

    return 0;
}

実行すると、表示は次のようになります。

x:  3 1
y:  2 3
x:  5 3
y:  4 5
x:  7 5
y:  6 7
x:  9 7
y:  8 9
x:  11 9
y:  10 11

私の限られた理解で、私はこれを思いつきました。同じステートメントで複数のインクリメント操作が使用されているため、cout ステートメントが情報をコンソールに表示する前に両方が実行されます。
しかし、おそらくより正確な回答/説明を探しています

4

1 に答える 1

1

++y は int y の参照が渡される前に y の新しい値をインクリメントして代入しoperator<<(std::ostream&, const int&)、y++operator<<(std::ostream&,const int&)はリターン後に y をインクリメントして代入します

したがって、y=1 が operator<< y++ に渡されて 2 を出力するために呼び出され、opertator<< y の呼び出し後に 2 が割り当てられるため、最初に 2 を出力します。

y に対する operator<< への 2 番目の呼び出しでは、y が 2 に設定されています。参照が operator<< に渡される前に ++y が呼び出され、y は 3 です。

于 2013-03-01T03:27:33.953 に答える