Hacker News new | ask | show | jobs
by letney 4394 days ago
20+ year C/C++ programmer here. I always use ++x unless the postfix version (x++) provides more succinct code.

The postfix operator can incur a temporary variable to be created by the compiler and thus make code slower.

Reference: http://www.idinews.com/peeves/prefixIncr.html

Also, item #6 from "More Effective C++": http://bin-login.name/ftp/pub/docs/programming_languages/cpp...

2 comments

Do note that modern compilers can detect when the return value of the ++ operator is unused, and skip the extra steps when unneeded. (I've verified the resulting assembler myself from GCC 3.X.) That said, I still use the prefix notation because I can't come up with a good reason not to.
> Do note that modern compilers can detect when the return value of the ++ operator is unused, and skip the extra steps when unneeded.

Is there an equivalent instruction in assembly for postfix increment/decrement?

Neither one really has a direct "equivalent" in assembly.

Prefix is going to look something like:

  inc eax # increment the value
  mov eax,ecx # copy the return value to its destination
Postfix is going to look something like:

  mov eax,ebx # copy original value
  inc eax # increment value
  mov ebx,ecx # copy original value to final destination
The actual code you'd get would vary a lot between compilers, architectures, and even just different contexts within the same compiler-architecture combination.
Thank you, dammit I really should learn assembly.
On the flipside, using pre-increment introduces a dependency, which means the processor can't do Out-of-order execution on instructions using that value...