On Mon, 04 Jun 2012 20:57:11 +0200, simendsjo <simend...@gmail.com> wrote:

On Mon, 04 Jun 2012 20:36:14 +0200, Xinok <xi...@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.

Oh, and what should writeln(i++, ++i, ++i, i++) do?

It is messy whatever the logic implementation.

Reply via email to