class CMyDouble {public: ...private: double m_val;};...inline int CMyDouble::operator == (const CMyDouble& val) const { return m_val <= val.m_val && m_val >= val.m_val;}
Citace od: Waseihou kdy 23. 10. 2012, 13:53:23Může mít nějaký význam porovnání bylo uděláno takto a ne pouze jako m_val==val.m_val? Třeba zaokrohlouvání a podobně...
class Object ...inline int operator == (const Object& val) const { return sub_object <= val.sub_object && val.sub_object <= sub_object;}
Citace od: poiu kdy 23. 10. 2012, 14:58:24To tipujem na zlé opisovanie z nejakého manuálu.Tam sa zvykne definovať Kód [Vybrat] Rozbalitclass Object ...inline int operator == (const Object& val) const { return sub_object <= val.sub_object && val.sub_object <= sub_object;}Tie nerovnosti bývajú na 1 stranu, aby stačilo mať <= na definíciu ostatných nerovností. A potom to niekto videl a zle to opísal, pričom nezohľadnil rozumne porovnateľné dátové typy.
Citace od: Inkvizitor kdy 24. 10. 2012, 09:02:48Takže je to celé proto, aby se minimalizovala definice? To by mi jediné v této diskusi dávalo smysl.
Citace od: Waseihou kdy 24. 10. 2012, 13:34:24Nikoliv, jedná se o hovnokod, protože takto definovat operátor == přímo na typ double je nesmysl. Dělal jsem si test a nenašel jsem situaciy, kdy by platilo (x==y)!=(x>=y && y<=x). Opravdu nevidím smysl.
Citace od: poiu kdy 24. 10. 2012, 13:50:32Citace od: Inkvizitor kdy 24. 10. 2012, 09:02:48Takže je to celé proto, aby se minimalizovala definice? To by mi jediné v této diskusi dávalo smysl.Príspevkom som myslel skôr to, že niekto zle opisoval odniekiaľ, kde sa minimalizovala definícia u iných objektov, kde ide porovnávať len <=.Ak máš ==, tak použi namiesto takej konštrukcie ==; u primitívnych dátových typov je to ešte oveľa jasnejšie. U doublov/floatov by si si naviac mal dať pozor a uvedomiť si "toto niekedy nebude fungovať, ako sa čakalo" a prepísať to s použitím nejakého epsilon.