【D言語】構造体の比較の挙動

構造体を比較する際、今までは、opEqualsが定義されていなければビット比較されていました。 ですが、ビット比較だと、


struct S
{
    int[] ary;
}

void main()
{
    S s1 = S([1, 2, 3]), s2 = S([1, 2, 3]);
    assert(s1 == s2); // fail!!
}

このような場合、等しくないとされてしまいます。 なかなか不便ですね。


最近のPull Requestによって、ビット比較ではなくメンバー比較になるようになりました。


struct S
{
    int[] ary;
}

void main()
{
    S s1 = S([1, 2, 3]), s2 = S([1, 2, 3]);
    assert(s1 == s2); // OK s1.tupleof == s2.tupleofと同じ
}

これで、わざわざメンバーを比較するopEqualsを定義する必要が無くなりました!

担当:美馬(CTFEと挙動が揃ってよかった)