Reddit: why aren't people using D?
Don
nospam at nospam.com
Fri Jul 24 01:40:53 PDT 2009
Michiel Helvensteijn wrote:
>>>>> * Operator overloading (no fine control over comparison operators,
>>>> > fixed commutativity,
>>>>
>>>> This is deliberate. Operator overloading should be restricted to
>>>> implementing arithmetic like operations on objects, not completely
>>>> different things like what iostreams, Spirit and Boost::regex do.
>>> Arithmetic like operations like matrix multiplication (which is not
>>> commutative)?
>> I believe this is completely controllable with D.
>
> Not if commutativity of the * operator is fixed. The documentation states
> that * is commutative, which in fact for integers it is. So if I overload *
> for matrices, for all the guarantees the docs give me, a D compiler might
> choose to swap the operands around (perhaps to get some memory alignment
> advantage), and the returned matrix would be incorrect.
That's not what the documentation means. * is only 'default
commutative'. If a.opMul(b) is defined, by default you get b * a ==
a*b. To prevent this behaviour, you just need to define a.opMul_r(b), or
b.opMul(a).
(The documenation could be a bit clearer on this).
More information about the Digitalmars-d
mailing list