Why is operator overloading like this in D?
Frits van Bommel
fvbommel at REMwOVExCAPSs.nl
Sun Dec 10 03:23:32 PST 2006
CloudiDust wrote:
> On the other hand, as there are many classes with which less or greater than
> comparisons (even equality tests) makes no sense, why opCmp becomes a "default"?
> Resulting in a requirement to make arguments of opCmp be of type Object when
> overloading?
That's to allow calling it if you only have an Object reference. This is
used in the implementation of associative arrays, and maybe some other
places in the standard library.
> ( Maybe I'm just feeling unused to test the type of objects inside the functions. :)
>
> If not overloaded, opEquals does a bit comparison on everything, doesn't it?
In structs, yes. In classes, Object.opEquals compares addresses (object
identity).
> And from the reference, I get: "If a struct has no opCmp() function declared for
> it, attempting to compare two structs is an error."
>
> And what does the default opCmp do with classes?
Throw an exception. (It used to compare addresses, but that was bad
because then the result can change between GC cycles if a moving
collector is implemented)
More information about the Digitalmars-d-learn
mailing list