On Saturday, 29 March 2014 at 17:29:51 UTC, MattCoder wrote:
On Saturday, 29 March 2014 at 16:31:48 UTC, Frustrated wrote:
On Friday, 28 March 2014 at 19:57:13 UTC, MattCoder wrote:
On Friday, 28 March 2014 at 19:35:22 UTC, Frustrated wrote:
which means, i = is the previous value of j(before increment).
This should hold true when j is an alias for i.

In this case: i = i++;  Means:

"i" is incremented by one, but the value assigned in "i" is the
previous one. That's it.

For me there's nothing wrong here.

Matheus.


One thing you are getting wrong/leaving out is that i++, even in an assignment, increments i.

I see your pain pal... so I took a look around:
http://dlang.org/expression.html

And according the page above:

"Expressions

C and C++ programmers will find the D expressions very familiar,
with a few interesting additions.

Expressions are used to compute values with a resulting type.
These values can then be assigned, tested, or ignored.
Expressions can also have side effects.

Order Of Evaluation

The following binary expressions are evaluated in strictly
left-to-right order:
[i]
OrExpression, XorExpression, AndExpression, CmpExpression,
ShiftExpression, AddExpression, CatExpression, MulExpression,
PowExpression, CommaExpression, OrOrExpression, AndAndExpression
[/i]

The following binary expressions are evaluated in an
implementation-defined order:

AssignExpression, function arguments

It is an error to depend on order of evaluation when it is not
specified. For example, the following are illegal:

i = i++;"

Matheus.

My only point is that monarch was wrong ;) Trying to justify how dmd does it is like trying to prove your conclusion by stating it as a hypothesis. Regardless if the correct behavior is to increment i(which I think it should) or for it to be illegal, the wrong behavior is to leave i unchanged. Luckily I'd never write such a statement but I wonder if there are more complex cases that produce wrong behavior?


Reply via email to