比较的运算符(<=、>、==等)您是否通常将其实现为基本运算符,之后可以使用它来实现rest比较运算符或在类之间进行所有可能的比较?
发布于 2011-01-04 07:26:55
您可以使用以下等效项根据==和<实现所有六个运算符:
a != b => !(a == b)
a > b => b < a
a >= b => !(a < b)
a <= b => !(b < a)发布于 2011-01-04 07:47:14
我通常为对象和operator!=实现operator==。许多对象没有排序序列,因此比较操作符<、<=、>、>=没有意义。
此外,通过使用boost::equality_comparable和boost::less_than_comparable,只需要实现operator==和operator<。这些可以在boost/operators.hpp中找到。
此外,我还了解到,在基类或接口类中放置比较运算符可能会变得相当棘手,因为它们允许将Descendent_A与Descendent_B进行比较,这是两个不同的子类。
比较运算符应根据需要在类中实现。许多类都不需要它们。另外,要注意在基类中实现或定义它们,而不考虑继承的后果。
发布于 2011-01-04 07:28:11
对于适用的类,我通常“本机”地实现operator<和operator==,因为它们在标准算法和容器中非常重要。
然后,我在这些方面实现了其他四个。
我有时考虑的另一种方法是实现一个“比较”函数,它以strcmp的方式返回1、0或-1,并实现所有其他运算符。只有当operator<和operator==看起来需要共享大量相同的代码时,我才会这样做,而我认为这种情况发生的频率并不高。
https://stackoverflow.com/questions/4589353
复制相似问题