我現在回顧舊的C++代碼庫,看到了很多代碼會是這樣的:應該通過C++中的「operator ==」實現「operator!=」嗎?
bool SomeClass::operator==(const SomeClass& other) const
{
return member1 == other.member1 && member2 == other.member2;
}
bool SomeClass::operator!=(const SomeClass& other) const
{
return member1 != other.member1 || member2 != other.member2;
}
顯然比較邏輯被複制和上面的代碼將有可能在兩個地方,而不是在一個改變。
AFAIK實施operator!=
的典型方式是這樣的:
bool SomeClass::operator!=(const SomeClass& other) const
{
return !(*this == other);
}
在任何邏輯變化發生在operator==
它會自動地反映在operator!=
因爲它只是調用operator==
並執行否定後者的情況。
是否有任何合理的情況下,operator!=
應該以任何其他方式實現,除了在C++代碼中重用operator==
?
同樣,應該嘗試以最不重複的方式實現`>,> =,<=,<`運算符。 – 2011-01-12 10:14:52
規則不應該是絕對的。所有規則一般都適用。但我確信總會有特定的情況下,他們不會。但是提出一個問題(除非你昨天碰巧這樣做)一般是不可能的(因爲它們是規則的例外)。它的要求都是天鵝白。是的,所有天鵝都是白色的(直到1500年在澳大利亞發現黑天鵝)。 Ceaser:「rara avis in terris nigroque simillima cygno」 – 2011-01-12 16:59:14