Increment / Decrement Operator Behavior
simendsjo
simendsjo at gmail.com
Mon Jun 4 11:57:11 PDT 2012
On Mon, 04 Jun 2012 20:36:14 +0200, Xinok <xinok at live.com> wrote:
> The increment and decrement operators are highly dependent on operator
> precedence and associativity. If the actions are performed in a
> different order than the developer presumed, it could cause unexpected
> behavior.
>
> I had a simple idea to change the behavior of this operator. It works
> for the postfix operators but not prefix. Take the following code:
>
> size_t i = 5;
> writeln(i--, i--, i--);
>
> As of now, this writes "543". With my idea, instead it would write,
> "555". Under the hood, the compiler would rewrite the code as:
>
> size_t i = 5;
> writeln(i, i, i);
> --i;
> --i;
> --i;
>
> It decrements the variable after the current statement. While not the
> norm, this behavior is at least predictable. For non-static variables,
> such as array elements, the compiler could store a temporary reference
> to the variable so it can decrement it afterwards.
>
> I'm not actually proposing we actually make this change. I simply
> thought it was a nifty idea worth sharing.
If I ever saw a construct like that, I would certainly test how that
works, then rewrite it.
I wouldn't find it natural with the new behavior either. I would expect
"543" or "345".
How often do you come across code like that? I think it's an anti-pattern,
and shouldn't be encouraged even if it was easier to understand.
More information about the Digitalmars-d
mailing list