Ok, what does this expression do or mean? First of all: never write something like this in your code. Nobody understands the meaning with a single look and that will lead to confusion and maybe to a bug in your software someday.
Now let’s take a deeper look. First you may think about the difference between x++
and ++x
. If you write it as a single statement both expressions are equal, but if you use it as a part of a complex expression the first will evaluated to the value of x
before increasing it; the second one will evaluate to the new value of x
. So y = x++;
leads to a different result for y
as y = ++x;
.
x+=a
simply is a ‘shortcut’ for x=x+a
.
Now let’s do it step by step. For example x
is 5
. Then first x
will be increased by one to 6
but the old value will go into the formula that remains as x=x+5
. Since x
was increased before the result will be 11
.
If you think that is all right, than please take a break and test it with your favorite compiler. If you are a C or C++ guy you will in fact receive 11 as an answer and everything is fine. But if you are a C# or java guy x
will be 10
. Why?
.Net as well as the Java Runtime are stack machines. The expression will be put on the stack step by step before evaluating the whole thing. At that time x
is 5. x
will be changed to 6
by the x++
part, but that only happens in the main memory. The old value (5
) is still on the stack. After executing the whole expression the changed x
will be overwritten by 10
(5+5
).
And once again: NEVER write code like this!
September 30th, 2009 at 8:13 am
I don’t know about C# and Java, but wrt C and C++ the only correct statement is “NEVER write code like this!”
x += x++ is simply undefined for basic types (int, double, …) http://c-faq.com/expr/ieqiplusplus.html
Why am I the first to comment? maybe only Google (that gave me this page) has read it. So this will be my boyscout good did of today: correct one C-misconception for one person.
Sigh …