エラーのためにそのコードがコンパイルされないのはなぜですか:
#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++ はそうではありません。