質問

クラスでは、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_;
   }

};

いいえ、それは絶対に大丈夫です-私はまったく同じことをします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top