6

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

これを行うことで明らかな問題は見られませんが、誰かが知っているかどうか尋ねたいと思いました。

4

3 に答える 3

11

operator!=これは、同じことを繰り返さないようにするための推奨される実装方法であり、 との正しい関係が保証されていると思いますoperator==

于 2009-01-12T19:20:35.517 に答える
3

operator!=as!operator==と定義しても問題ありません

これらの単純な同等の演算子を簡単に定義するために、私は常にBoost.Operatorsを使用します。 and
のみの場合(つまりequality_comparable<>を使用する場合) はあまり効果がありません。operator==operator!=

しかし、より少ないものとより多いものが必要な場合、または などの組み合わせが必要な場合、operator+これ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_;
   }

};
于 2009-01-12T20:03:36.880 に答える
0

No, that's absolutely fine - I do exactly the same.

于 2009-01-12T19:20:05.737 に答える