下面的代码给出了在C编译器中编译时的错误

++(-i);
error: lvalue required as increment operand

这意味着-i返回右值。

而代码
++(+i);

不要犯任何错误。为什么这样? this link说+ i不会导致左值。

最佳答案

这是您的编译器中的一个小故障。在C语言中,即使在应用任何运算符之前,表达式中的所有左值都会转换为右值,但sizeof&++--.的操作数以及+i和赋值的左侧(请参见6.3.2/2)

换句话说,在C语言中+必须产生一个右值,不是因为一元i应该产生一个右值,而是因为+在该一元int i甚至有机会做它的事情之前就已转换为rvalue。

例如,对于具有值42+i变量,表达式+42完全等同于表达式i。在一元42的语义开始发挥作用之前,+的左值性消失了,并变成了+

不用说,在这种情况下,一元ojit_code的结果不可能是左值。

关于c - + i返回左值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12019940/

10-11 18:31