【发布时间】:2019-12-05 03:19:11
【问题描述】:
我用值 3 初始化了一个变量 i,然后在我的代码中添加了一个语句 (++i)++。但是,在 C 中,它显示错误“需要作为增量操作数的左值”。但是,如果我将这个类似的代码放在 c++ 中,它可以工作并显示双倍增量,输出为 5。但是,我的一个朋友使用 c 尝试了他的编译器,它给出了输出 4。
//using c
#include <stdio.h>
int main()
{
int i=3;
(++i)++;
printf("%d",i);
return 0;
}
//using c++
#include <bits/stdc++.h>
using namespace std;
int main()
{
int i=3;
(++i)++;
cout << i << endl;
return 0;
}
我正在使用 GNU GCC 编译器。
【问题讨论】:
-
它在 C 中被定义为非法的,原因你听说过。 (
i++的结果是一个右值,第二个++不能应用。) 但是C 和C++ 是不同的语言,C++ 有不同的规则。如果您想避免混淆,请使用i += 2。 -
很确定这是 C++ 中未定义的行为。仅仅因为您的编译器正确并不意味着这是正确的。简而言之:不要那样做。