0

重複の可能性:
未定義の動作とシーケンス ポイント

変数iは 2 回変更されていますが、次の例では未定義の動作が発生しますか?

#include <iostream>
int main()
{
    int i = 5;
    std::cout << "before i=" << i << std::endl;
    ++ i %= 4;
    std::cout << "after i=" << i << std::endl;
}

私が得る出力は次のとおりです。

before i=5
after i=2
4

1 に答える 1

7

はい、未定義です。代入、% または ++ にシーケンス ポイントはありません。また、シーケンス ポイント内で変数を複数回変更することはできません。

コンパイラはこれを次のように評価できます。

++i;
i = i % 4;

また

i = i % 4;
++i;

(または、他の何か)

于 2011-05-26T08:46:03.627 に答える