9
#include <stdio.h>

int main()
{
   int i = 10;
   printf("%d\n", ++(-i)); // <-- Error Here
}

有什么问题++(-i)?请说清楚。

4

4 回答 4

10

-i生成一个临时的,你不能申请++一个临时的(作为右值表达式的结果生成)。预增量++要求其操作数是左值,-i而不是左值,因此您会收到错误。

于 2011-06-03T17:04:41.927 回答
5

++运算符递增一个变量。(或者,更准确地说,一个左值——可以出现在赋值表达式左侧的东西)

(-i)不是变量,因此增加它没有意义。

于 2011-06-03T17:04:30.130 回答
1

您不能增加没有 identity的临时值。您需要将其存储在某些东西中以增加它。您可以将左值视为可以出现在表达式左侧的东西,但最终您需要将其视为具有标识但不能移动的东西(C++0x 术语)。这意味着它有一个身份,一个引用,指的是一个对象,你想保留的东西。

(-i) 没有身份,所以没有什么可以引用它。没有什么可以引用它,就没有办法在其中存储一些东西。您不能引用 (-i),因此,您不能增加它。

试试 i = -i + 1

#include <stdio.h>

int main()
{
   int i = 10;
   printf("%d\n", -i + 1); // <-- No Error Here
}
于 2011-06-03T17:05:05.557 回答
0

试试这个:

#include <stdio.h>

int main()
{
   int i = 10;
   printf("%d\n", (++i) * -1);
}
于 2011-06-03T17:06:40.400 回答