1

--foo++;

C 中的有效语句?(它会编译/运行)这有什么实际应用吗?

很抱歉在编辑中更改了问题,但我发现了一些东西。

根据我的 C++ 编译器(Visual Studio 2010):

--++foo;

是一个有效的命令,但

foo--++; 

不是。这有什么原因吗?

4

2 回答 2

8

不,它无效,因为递增/递减运算符的结果不是左值。

编辑: OP 通过添加另外两个示例来编辑他的问题。所以我们开始了,出于同样的原因:

--++foo;
--foo++;
foo--++;

都是无效的表达式语句,因为递增/递减运算符的结果不是左值。编译器可以扩展语言并接受这些表达式,但严格遵守的程序不能包含任何这些表达式。

于 2012-07-26T23:02:00.043 回答
0

由于这是一个 C 表达式,它应该遵循一些级联评估步骤来找出结果。

你的表情是

--++foo;

好的,让我们评估这第一步:-

++富;

必须进行评估才能继续

这是一些预增量,所以 foo 变成 foo+1 。

然后分配发生

这就是评估为 foo=foo+1;

并且 foo 的值返回以分配给变量(如果不存在则忽略)。

所以现在我们的表达如下

--(++foo); 评估为

--(a constant value);//foo+1的结果

该语句再次评估为

a constant value=constant_valu+1;//右边部分可以但左边部分不是变量

因为赋值运算符的左侧不是变量并引发错误。

所以现在没有有效的操作数 -- /decrement 运算符所以需要左值错误

于 2012-07-27T04:55:18.983 回答