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.

Reply via email to