Comparaison de la surcharge d'opérateur

Qui est la meilleure pratique (dans ce cas):

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

Pour les opérateurs comme >, <, <=, >= je voudrais aller avec la mise en œuvre 2 lorsque cela est possible. Cependant, pour != Je pense que la mise en œuvre 1 est meilleure depuis un autre appel de méthode n'est pas faite, est-ce correct?

  • J'aimerais écrire de la façon la plus naturelle d'exprimer cela correctement. Le compilateur va probablement faire un bon travail de compilation de ce qui jamais la manière que vous choisissez.
  • Ok merci. Comme une note de côté, je sais que si l' == est trop complexe, alors la mise en œuvre 2 serait mieux, mais c'est une autre affaire.
  • Vous devez ajouter un const à chacune des fonctions. Pensez aussi à utiliser des fonctions libres plutôt que des fonctions de membre du, que les anciens sont symétriques par rapport à des types et des conversions où ce dernier ne le sont pas. Ce qui est plus important, si votre type peut être implicitement converti à partir d'autres types.
InformationsquelleAutor blaze | 2012-05-13