Quick and dirty Operator! =
-
22-07-2019 - |
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.
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