QUESTION:
#include <stdio.h>
int main()
{
int i = 0;
(i+=10)+=10;
printf("i = %d\n", i);
return 0;
}
In.c :error: lvalue required as left operand of assignment
In .cpp :i = 20
ANSWER 1:
Semantics of the add-assign operators is different in C and C++:
C99 standard, 6.5.16, part 3:
An assignment operator stores a value in the object designated by the left operand. An assignment expression has the value of the left operand after the assignment, but is not an lvalue.
In C++ 5.17.1:
The assignment operator (=) and the compound assignment operators all group right-to-left. All require a modifiable lvalue as their left operand and return an lvalue with the type and value of the left operand after the assignment has taken place.
C returns the result value, but C++ returns the variable .
ANSWER 2:
(i+=10)+=10 is undefined behaviour in both C and C++03 because it modifies i twice between sequence points.