#include <stdio.h>
int main()
{
int i = 10;
printf("%d\n", ++(-i)); // <-- Error Here
}
What is wrong with ++(-i)
? Please clarify.
-i
generates a temporary and you can't apply ++
on a temporary(generated as a result of an rvalue expression). Pre increment ++
requires its operand to be an lvalue, -i
isn't an lvalue so you get the error.
The ++
operator increments a variable. (Or, to be more precise, an lvalue—something that can appear on the left side of an assignment expression)
(-i)
isn't a variable, so it doesn't make sense to increment it.
You can't increment a temporary that doesn't have an identity. You need to store that in something to increment it. You can think of an l-value as something that can appear on the left side of an expression, but in eventually you'll need to think of it in terms of something that has an identity but cannot be moved (C++0x terminology). Meaning that it has an identity, a reference, refers to an object, something you'd like to keep.
(-i) has NO identity, so there's nothing to refer to it. With nothing to refer to it there's no way to store something in it. You can't refer to (-i), therefore, you can't increment it.
try i = -i + 1
#include <stdio.h>
int main()
{
int i = 10;
printf("%d\n", -i + 1); // <-- No Error Here
}
Try this instead:
#include <stdio.h>
int main()
{
int i = 10;
printf("%d\n", (++i) * -1);
}
来源:https://stackoverflow.com/questions/6230274/lvalue-required-as-increment-operand-error