質問
クラスでは、operator!=
を返すことで簡単な!(*this == rhs)
を書くことがよくあります。例:
class Foo
{
private:
int n_;
std::string str_;
public:
...
bool operator==(const Foo& rhs) const
{
return n_ == rhs.n_ && str_ == rhs.str_;
}
bool operator!=(const Foo& rhs) const
{
return !(*this == rhs);
}
};
これを行うことで明らかな問題は見られませんが、誰かが何か知っているかどうか尋ねると思いました。
解決
自分が繰り返さないようにoperator!=
を実装する好ましい方法であり、operator==
との正しい関係が保証されていると思います。
他のヒント
operator!=
を!operator==
として定義するのは問題ありません
これらの簡単な同等の演算子を簡単に定義するには、常に Boost.Operators 。
operator==
およびoperator+
のみの場合(つまり、 equality_comparable <!> lt; <!> gt; )はあまり得られません。
しかし、必要な量が多すぎたり減ったり、またはoperator*
、<=>などの組み合わせが必要な場合、これは非常に便利になります。
ケースの例は次のようになります
class Foo : private boost::equality_comparable< Foo >
{
private:
int n_;
std::string str_;
public:
...
bool operator==(const Foo& rhs) const
{
return n_ == rhs.n_ && str_ == rhs.str_;
}
};
いいえ、それは絶対に大丈夫です-私はまったく同じことをします。
所属していません StackOverflow