是
--foo++;
C 中的有效语句?(它会编译/运行)这有什么实际应用吗?
很抱歉在编辑中更改了问题,但我发现了一些东西。
根据我的 C++ 编译器(Visual Studio 2010):
--++foo;
是一个有效的命令,但
foo--++;
不是。这有什么原因吗?
是
--foo++;
C 中的有效语句?(它会编译/运行)这有什么实际应用吗?
很抱歉在编辑中更改了问题,但我发现了一些东西。
根据我的 C++ 编译器(Visual Studio 2010):
--++foo;
是一个有效的命令,但
foo--++;
不是。这有什么原因吗?
不,它无效,因为递增/递减运算符的结果不是左值。
编辑: OP 通过添加另外两个示例来编辑他的问题。所以我们开始了,出于同样的原因:
--++foo;
--foo++;
foo--++;
都是无效的表达式语句,因为递增/递减运算符的结果不是左值。编译器可以扩展语言并接受这些表达式,但严格遵守的程序不能包含任何这些表达式。
由于这是一个 C 表达式,它应该遵循一些级联评估步骤来找出结果。
你的表情是
--++foo;
好的,让我们评估这第一步:-
++富;
必须进行评估才能继续
这是一些预增量,所以 foo 变成 foo+1 。
然后分配发生
这就是评估为 foo=foo+1;
并且 foo 的值返回以分配给变量(如果不存在则忽略)。
所以现在我们的表达如下
--(++foo); 评估为
--(a constant value);//foo+1的结果
该语句再次评估为
a constant value=constant_valu+1;//右边部分可以但左边部分不是变量
因为赋值运算符的左侧不是变量并引发错误。
所以现在没有有效的操作数 -- /decrement 运算符所以需要左值错误