Comparison
Meta
jared771 at gmail.com
Fri Nov 29 04:37:58 PST 2013
On Thursday, 28 November 2013 at 13:23:22 UTC, Jonas Drewsen
wrote:
> On Wednesday, 27 November 2013 at 00:46:30 UTC, Ary Borenszweig
> wrote:
>> On 11/26/13 7:00 PM, Namespace wrote:
>>> On Tuesday, 26 November 2013 at 21:37:49 UTC, Jonas Drewsen
>>> wrote:
>>>> Isn't it a bug that the assertion is triggered for this:
>>>>
>>>> class Test3 {}
>>>>
>>>> void main()
>>>> {
>>>> assert( (new Test3()) == (new Test3()) );
>>>> }
>>>>
>>>> Tried it on http://dpaste.dzfl.pl/ as well.
>>>>
>>>> /Jonas
>>>
>>> Because your Test3 class has probably no own opEquals method,
>>> your
>>> comparison is the same as
>>> assert( (new Test3()) is (new Test3()) );
>>> which is obviously wrong.
>>>
>>> See:
>>> https://github.com/D-Programming-Language/druntime/blob/master/src/object_.d#L116
>>>
>>
>> The ddoc for the method is wrong. It should say something like:
>>
>> returns != 0 if this object has the same memory address as
>> obj. Subclasses may override this method to provide custom
>> equality comparison.
>>
>> Because for the OP, Test3 has the same contents as the other
>> Test3 (both empty).
>
> "does have the same contents as obj"
>
> yes this is what confused me... and actually, it is a bit wierd
> coming from a c++ background that obj1 == obj2 is the same as
> (obj1 is obj2) and not per field comparison as expected (and
> documented). What is the reasoning behind this... principle of
> most astonishment? :)
C++ is the odd one out here, I believe. Most OO languages compare
addresses by default.
More information about the Digitalmars-d-learn
mailing list