i++ :
- create a temporary copy of i
- increment i
- return the temporary copy
++i :
- increment i
- return i
With optimizations on, it is quite possible that the resulting assembly is identical, however ++i is more efficient.
edit : keep in mind that in C++, i may be whatever object that support the prefix and postfix ++ operator. For complex objects, the temporary copy cost is non negligible.