Frage

In meinen Klassen Ich schreibe oft eine schnelle operator!= von !(*this == rhs) Rückkehr z.

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

Ich kann keine offensichtlichen Probleme sehen dies mit zu tun, aber dachte, ich würde fragen, ob jemand von jeder kennt.

War es hilfreich?

Lösung

Ich glaube, das ist die bevorzugte Methode operator!= der Implementierung, so dass Sie sich nicht wiederholen, und Sie haben eine richtige Beziehung garantiert mit operator==.

Andere Tipps

Definition operator!= als !operator== ist gerade fein

Für diese trivialen äquivalenten Operatoren leicht definiert bekommen, habe ich immer ein href verwenden <= „http://www.boost.org/doc/libs/1_37_0/libs/utility/operators.htm“ rel = „nofollow noreferrer“ > Boost.Operators .
Der Fall mit nur operator== und operator!= (dh mit equality_comparable <> ) gewinnt nicht sehr viel.

Aber wenn Sie brauchen weniger und mehr als auch, oder eine Kombination aus operator+, operator* usw. wird dies sehr praktisch.

Ein Beispiel für Ihren Fall würde lesen

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

};

Nein, das ist absolut in Ordnung -. Ich mache genau die gleiche

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top