lvalue需要作为增量操作数错误

时间:2011-06-03 17:03:22

标签: c++ c operators lvalue rvalue

#include <stdio.h>

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

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

4 个答案:

答案 0 :(得分:8)

-i生成一个临时文件,您不能对临时(由于rvalue表达式生成)应用++。预增量++要求其操作数为左值,-i不是左值,因此您会收到错误。

答案 1 :(得分:5)

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

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

答案 2 :(得分:1)

您无法增加没有身份的临时 。你需要将它存储在某个东西中以增加它。 您可以将l值视为可以出现在表达式左侧的内容,但最终您需要根据具有标识但无法移动的内容来考虑它(C ++ 0x术语) )。意味着它有一个身份,一个参考,指的是一个你想要保留的东西。

( - i)没有身份,因此没有任何内容可以参考。没有任何东西可以指代它,没有办法存储它的东西。你不能引用(-i),因此,你不能增加它。

尝试i = -i + 1

#include <stdio.h>

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

答案 3 :(得分:0)

请改为尝试:

#include <stdio.h>

int main()
{
   int i = 10;
   printf("%d\n", (++i) * -1);
}