Operator overloading -- lets collect some use cases

Stewart Gordon smjg_1998 at yahoo.com
Wed Dec 31 04:45:33 PST 2008


Don wrote:
> Andrei Alexandrescu wrote:
<snip>
>> Well I forgot whether BigInt is a class, is it? Anyhow, suppose it 
>> *is* a class and as such has reference semantics. Then a += b modifies 
>> an object in-situ, whereas a = a + b creates a whole new object and 
>> happens to bind a to that new object.

Assuming that BigInt is mutable.

> You're right, though BigInt is not a class. I have, though, seen a 
> BigIntRef class (in Diemos, I think) which behaved in that way. AFAIK, 
> the reason it existed was that the only way you can enforce value 
> semantics in D1 is via copy-on-write, which results in many unnecessary 
> heap allocations and copies.
> So Fritz is correct, it could not be enforced for reference types.
> The question then is, when are reference semantics desired for an object 
> with arithmetical operator overloading?
> 
> For matrix slices, maybe? But even then I'm not certain you'd want to 
> allow X=X+Y; you'd probably want to use X[]=X[]+Y[].

They would probably do different things:
- assigning to X would reassign the reference that is X
- assigning to X[] would fill X in-place.

Stewart.



More information about the Digitalmars-d mailing list