Killer framerates.

Started by
29 comments, last by Vlion 22 years, 6 months ago
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.

This topic is closed to new replies.

Advertisement