快速而肮脏的操作员!=

时间:2009-01-12 19:16:17

标签: c++ operator-overloading

在我的课程中,我经常通过返回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);
    }
};

我无法看到这样做有任何明显的问题,但我想我会问是否有人知道。

3 个答案:

答案 0 :(得分:11)

我认为这是实施operator!=的首选方法,因此您不会重复自己,并且与operator==保持正确的关系。

答案 1 :(得分:3)

operator!=定义为!operator==就好了

为了轻松定义这些简单的等效运算符,我总是使用Boost.Operators
只有operator==operator!=(即使用equality_comparable<>)的情况不会获得太多收益。

但是当你需要更少和更多,或者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_;
   }

};

答案 2 :(得分:0)

不,这绝对没问题 - 我做的完全一样。