3

エラーのためにそのコードがコンパイルされないのはなぜですか:

#include <iostream>

using namespace std;

int main()
{
    int i = 0; 
    cout << ++(i++) << " " << i << endl;
    return 0;
}

そのコードがコンパイルされている間:

#include <iostream>

using namespace std;

int main()
{
    int i = 0; 
    cout << (++i)++ << " " << i << endl;
    return 0;
}

私はそれを理解していません。私の観点からは、最初のチャンクをコンパイルするのはかなり合理的です。式 ++(i++) は、i を取得し、それをインクリメントして出力し、再度インクリメントすることを意味します。

int オーバーフローの未定義の動作について質問しているわけではありません。質問を書いている時点では、r と l の値についてまったく知りません。なぜ ++i が l 値と見なされるのか気にしませんが、i++ はそうではありません。

4

3 に答える 3