op=

Ellery Newcomer ellery-newcomer at utulsa.edu
Sat Jan 23 08:48:51 PST 2010


On 01/22/2010 12:23 PM, Steven Schveighoffer wrote:
> On Thu, 21 Jan 2010 22:44:24 -0500, Ellery Newcomer
> <ellery-newcomer at utulsa.edu> wrote:
>
>> according to the spec,
>>
>> a op= b;
>>
>> is semantically equivalent to
>>
>> a = a op b;
>>
>> but this doesn't seem to be strictly true. for example:
>>
>> char c = 'a';
>> real r = 3.14;
>>
>> c = c + r; // error
>>
>> c += r; // accepted; seems to be doing c += floor(r);
>>
>> is this behavior intentional?
>
> There are two issues, I think recently discussed, a op= b is actually
> equivalent to:
>
> a = a op cast(typeof(a))b;
>
> when dealing with primitives. I'm not sure if this happens with user
> defined types.
>
> And the second issue (if you want to get technical) is that a op= b is
> considered a different operation than a = a op b because one can
> manually optimize a op= b more than a = a op b. So technically the
> seemingly analogous calls can do something different. A good example is
> array appending, a ~= b is not equivalent to a = a ~ b, because the
> former may allocate in place and the latter always reallocates.
>
> -Steve

Alright, that makes sense enough, thanks.

Spec needs to be changed, though

http://d.puremagic.com/issues/show_bug.cgi?id=3735


More information about the Digitalmars-d-learn mailing list