Operator overloading -- lets collect some use cases
nospam at nospam.com
Wed Dec 31 07:02:39 PST 2008
Stewart Gordon wrote:
> Don wrote:
>> Andrei Alexandrescu wrote:
>>> 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
There's no problem with X=Y. But X=X+Y would imply creating a new piece
of matrix, and assigning X to it. I'm not sure that's an operation which
you would want. I guess D strings work that way, though.
> - assigning to X would fill X in-place.
In-place operations are straightforward: they are definitely useful.
More information about the Digitalmars-d