quote:Original post by buzzy_b
In The C++ Programming Language 3rd Ed. by Bjarne Stroustrup (the creator of C++) this is how the increment operator works.
y = ++x;
is equivalent to
y = (x+=1);
while
y = x++;
is equivalent to
y = (t=x, x+=1, t) where t is a variable of the same type as x.
Perhaps modern compilers (i.e. VC++) produce the same assembly code for both, but the official definition of C++ says that there is a difference. I hope that clears that up.
--Buzzy
No one says they are the same. The ++x returns the incremented value, and x++ returns the value before increment. That t value only makes an appearance because they wanted to write it in one line of C in the spec. Remember, the spec is defining the behavior of the statements, but you are free to use any _equivalent_ implementation and you will still be following the standard.
Assembly doesn''t do as much in a single line as C, so it is going to roll out into multiple statements.
Here, let me write an equivalent statement to the spec''s in C (with multiple statements).
y = ++x;
is equivalent to:
x = x + 1; y = x;
while
y = x++
is:
y = x;x = x + 1;
Same number of operations, See?
You do often need some extra space when it''s an overloaded operator on a class, but in C, there is _no_ speed difference. C++ /might/ have a difference, depending on how the programmer wrote the pre and post increment functions. But I could certainly overload my operators in such a way that postincrement would be faster, if I so desired.