为什么该代码由于错误而无法编译:
#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++ 不是。