下面的代码给出了在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/