6

Visual C++ と Java で次のプログラムを実行しています。

ビジュアル C++

void main()
{
    int i = 1, j;
    j = i++ + i++ + ++i;
    printf("%d\n",j);
}

出力:

6

ジャワ:

public class Increment {
    public static void main(String[] args) {
        int i = 1, j;
        j = i++ + i++ + ++i;
        System.out.println(j);
    }
}

出力:

7

これら 2 つの言語の出力が異なるのはなぜですか? 両方の言語でプリインクリメント演算子とポストインクリメント演算子の扱いが異なるのはなぜですか?

4

2 に答える 2

4

C++ の例では、未定義の動作が発生します。1 つの式で値を複数回変更してはなりませんシーケンスポイント間。[より正確になるように編集。]

同じことがJavaにも当てはまるかどうかはわかりません。しかし、それは確かに C++ に当てはまります。

ここに良いリファレンスがあります:
未定義の動作とシーケンスポイント

于 2013-07-07T18:10:36.030 に答える