op=

Steven Schveighoffer schveiguy at yahoo.com
Fri Jan 22 10:23:07 PST 2010


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


More information about the Digitalmars-d-learn mailing list