#include <stdio.h>
int main()
{
int i = 10;
printf("%d\n", ++(-i)); // <-- Error Here
}
++(-i)
有什么问题?请澄清。
答案 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);
}