Pregunta

En mis clases, me escriben a menudo una rápida operator!= por la devolución de los !(*this == rhs), por ejemplo:

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

No veo ningún problema obvio con hacer esto, pero pensé que me gustaría preguntar si alguien sabe de alguna.

¿Fue útil?

Solución

Creo que ese es el método preferido para implementar operator!= para que no se repita y tenga una relación correcta garantizada con operator==.

Otros consejos

La definición de operator!= como !operator== está bien

Para conseguir estos trivial operadores equivalentes fácil de definir, yo siempre uso Boost.Los operadores.
El caso con sólo operator== y operator!= (es decir,el uso de equality_comparable<>) no aumenta mucho.

Pero cuando se necesita menos y mas que demasiado, o alguna combinación de operator+, operator* etc.esto resulta muy conveniente.

Un ejemplo para tu caso sería de leer

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

};

No, eso está absolutamente bien, hago exactamente lo mismo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top