【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と挙動が揃ってよかった)