Быстрый и грязный оператор! = - PullRequest
7 голосов
/ 12 января 2009

В моих классах я часто пишу быстрый 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 ]

11 голосов
/ 12 января 2009

Я полагаю, что это предпочтительный метод реализации operator!=, чтобы вы не повторялись и у вас были гарантированные правильные отношения с operator==.

3 голосов
/ 12 января 2009

Определение operator!= как !operator== просто отлично

Чтобы легко определить эти тривиальные эквивалентные операторы, я всегда использую Boost.Operators .
Случай только с 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_;
   }

};
0 голосов
/ 12 января 2009

Нет, это совершенно нормально - я делаю точно так же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...