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