【问题标题】:Quick and dirty operator!=快速而肮脏的操作员!=
【发布时间】:2009-01-12 19:16:16
【问题描述】:

在我的课堂上,我经常通过返回!(*this == rhs) 来写一个快速的operator!=,例如:

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);
    }
};

我看不出这样做有任何明显的问题,但我想问问是否有人知道。

【问题讨论】:

  • +1 仍然喜欢运算符重载而不是 IsEqual(ObjA,ObjB)。我觉得这很整洁

标签: c++ operator-overloading


【解决方案1】:

我相信这是实现operator!= 的首选方法,这样您就不会重复自己,并且您可以保证与operator== 的关系正确。

【讨论】:

    【解决方案2】:

    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_;
       }
    
    };
    

    【讨论】:

      【解决方案3】:

      不,这绝对没问题 - 我也是这样做的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-08
        • 1970-01-01
        • 2012-12-05
        • 1970-01-01
        • 1970-01-01
        • 2010-12-02
        • 1970-01-01
        • 2010-09-11
        相关资源
        最近更新 更多