#include <stdio.h>
int main()
{
int i = 10;
printf("%d\n", ++(-i)); // <-- Error Here
}
有什么问题++(-i)
?请说清楚。
-i
生成一个临时的,你不能申请++
一个临时的(作为右值表达式的结果生成)。预增量++
要求其操作数是左值,-i
而不是左值,因此您会收到错误。
++
运算符递增一个变量。(或者,更准确地说,一个左值——可以出现在赋值表达式左侧的东西)
(-i)
不是变量,因此增加它没有意义。
您不能增加没有 identity的临时值。您需要将其存储在某些东西中以增加它。您可以将左值视为可以出现在表达式左侧的东西,但最终您需要将其视为具有标识但不能移动的东西(C++0x 术语)。这意味着它有一个身份,一个引用,指的是一个对象,你想保留的东西。
(-i) 没有身份,所以没有什么可以引用它。没有什么可以引用它,就没有办法在其中存储一些东西。您不能引用 (-i),因此,您不能增加它。
试试 i = -i + 1
#include <stdio.h>
int main()
{
int i = 10;
printf("%d\n", -i + 1); // <-- No Error Here
}
试试这个:
#include <stdio.h>
int main()
{
int i = 10;
printf("%d\n", (++i) * -1);
}