【发布时间】:2017-12-12 03:19:30
【问题描述】:
为什么该代码由于错误而无法编译:
#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++ 不是。
【问题讨论】:
-
@user0042,我查了答案,但并没有让我失望。我没有询问整数溢出,我的代码中没有未定义的行为,只有一个错误。
-
@EugeneSh.,你读过我的问题吗?它与您提出的复制品完全不同。
-
@Yaroslav 这是确切的问题。 Post 和 pre-increment 运算符需要
lvalue作为操作数。在您的问题中,第一个不是lvalue,但第二个是。 -
@EugeneSh.,好的。现在你给我一个答案。但是,当我问这个问题时,我应该怎么知道答案呢?事实证明,您提出的与我重复的问题的答案有助于回答我的问题。
标签: c++ increment postfix-notation prefix-notation