Qual è la migliore prassi (in questo caso):confronto l'overloading degli operatori
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);
}
Per operatori come>, <, < =,> = vorrei andare con implementazione 2, quando possibile. Tuttavia, per! = Penso che l'implementazione 1 sia migliore poiché non viene effettuata un'altra chiamata al metodo, è corretto?
Lo scriverei nel modo più naturale per esprimerlo correttamente. Probabilmente il compilatore farà un ottimo lavoro di compilazione in qualunque modo tu scelga. – Flexo
Ok, grazie. Come nota a margine, so che se il == è troppo complesso, allora l'implementazione 2 sarebbe migliore, ma questo è un altro caso. – blaze
È necessario aggiungere un 'const' a ciascuna delle funzioni. Considera anche l'uso di funzioni libere piuttosto che funzioni membro, poiché le prime sono simmetriche rispetto a tipi e conversioni in cui queste ultime non lo sono. Questo è più importante se il tuo tipo può essere convertito implicitamente da altri tipi. –