¿Cuál es la mejor práctica (en este caso):Operador de comparación sobrecarga
bool Foo::operator==(const Foo& other) {
return bar == other.bar;
}
// Implementation 1
bool Foo::operator!=(const Foo& other) {
return bar != other.bar
}
// Implementation 2
bool Foo::operator!=(const Foo& other) {
return !(*this == other);
}
Para los operadores como>, <, < =,> = Me gustaría ir con aplicación 2 cuando sea posible. Sin embargo, para! = Creo que la implementación 1 es mejor ya que no se realiza otra llamada al método, ¿es correcto?
Lo escribiría de la manera más natural para expresarlo correctamente. Es probable que el compilador haga un buen trabajo de compilación en cualquier momento que elija. – Flexo
Ok gracias. Como nota al margen, sé que si el == es demasiado complejo, entonces la implementación 2 sería mejor, pero ese es otro caso. – blaze
Debe agregar un 'const' a cada una de las funciones. Considere también el uso de funciones gratuitas en lugar de funciones de miembros, ya que las primeras son simétricas con respecto a los tipos y las conversiones donde estos últimos no lo son. Esto es más importante si su tipo se puede convertir implícitamente de otros tipos. –