Order of evaluation - aka hidden undefined behaviours.

monarch_dodra monarchdodra at gmail.com
Wed Sep 26 06:34:54 PDT 2012


On Wednesday, 26 September 2012 at 12:48:19 UTC, Timon Gehr wrote:
> On 09/26/2012 02:07 PM, monarch_dodra wrote:
>> On Tuesday, 25 September 2012 at 22:58:11 UTC, Iain Buclaw 
>> wrote:
>>> Pop quiz!
>>>
>>> Without cheating, I invite people to have a good guess what 
>>> 'abc' is
>>> equal to, but just to narrow it down.
>>>
>>> 1)  It isn't "ABC".
>>> 2)  On x86/x86_64, it isn't "ACB".
>>> 3)  On everything else, it's the reverse of what you'd expect 
>>> on
>>> x86/x86_64.
>>
>> I'd say abc's value is "unspecified", and any attempt at 
>> predicting it
>> would be bogus. That's my answer anyways
>>...
>
> Why? This is not useful behaviour.

What do you mean "why"? Because order of evaluation is not 
specified, so the value of abc is not specified. That was my 
answer. The question wasn't really "what would useful behavior 
be".

IMO: useful behavior would be if it was explicitly illegal to 
modify (or modify + read) the same value twice in the same 
expression. I'd rather expressions such as:
A()[] = B()[] + C()[];
x[i] = ++i + 1;

Be illegal rather than have (an arbitrarily defined) specified 
behavior. Trying to specify a specific behavior in such cases is 
opening a can of worms.



More information about the Digitalmars-d mailing list