+我返回左值?

paw*_*wan 13 c

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

++(-i);
error: lvalue required as increment operand
Run Code Online (Sandbox Code Playgroud)

这意味着-i返回rvalue.

代码

++(+i);
Run Code Online (Sandbox Code Playgroud)

不要给出任何错误.为什么这样?这个链接说+我不会导致左值.

AnT*_*AnT 5

这是编译器中的一个小故障.在C语言中的表达式的所有的左值被转换为右值的任何运营商应用甚至前,用的操作数的例外sizeof,&,++,--和的左手侧.和分配(见6.3.2/2)

换句话说,在C语言中+i必须产生一个rvalue,因为unary不+应该产生一个rvalue,而是因为该一元甚至有机会完成它之前将i转换为rvalue .+

例如,对于int i保存值的变量42,expression +i完全等同于expression +42.在一元的语义发挥作用之前i,它的左值已经丢失并且变成了它.42 +

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