-6

c++で簡単にコーディングすると、非常に驚​​くべき衝撃的な論理的問題が発生します。

次の 2 つのコード チャンクを参照してください。

コード 1

int m = 5, n = 0;
n = m++ * ++m;
//This print m = 7 and n = 36
//Which is logically wrong

コード 2

int m = 5;
int n = m++ * ++m;
//This print m = 7 and n = 35
//Which is logically right

論理的に考えると、コード ブロック 2 は正しい答えを与えますが、驚くべきことまたは魔法のことは、コード ブロック 1 の何が問題なのかということです。

部分コードは同じで、int n先に宣言しただけです。

いくつかのコンパイルかもしれません!!!!!!!!

4

2 に答える 2

3

http://en.cppreference.com/w/cpp/language/eval_order特に「未定義の動作」について説明している部分を確認してください。基本的に、これはコンパイラのバグではありません。言語は、あなたがしていることは未定義であると言います。

于 2013-06-01T18:39:25.590 に答える