我需要重载的最小运算符集是什么?

时间:2011-01-03 23:26:16

标签: c++ operator-overloading

比较的运算符(< =,>,==等)你通常将它们作为基本运算符来实现,你可以在使用之后实现其余的比较运算符或者进行所有可能的比较班?

3 个答案:

答案 0 :(得分:7)

您可以使用以下等效项在==<方面实施所有六个运算符:

a != b    =>    !(a == b)
a > b     =>    b < a
a >= b    =>    !(a < b)
a <= b    =>    !(b < a)

答案 1 :(得分:3)

我通常会为对象和operator==实施operator!=。许多对象没有整理顺序,因此比较运算符&lt;,&lt; =,&gt;,&gt; =没有意义。

此外,使用boost::equality_comparableboost::less_than_comparable只需要实现operator==operator<。这些可以在boost/operators.hpp中找到。

另外,我已经了解到,在基础clases或接口类中放置比较运算符会变得非常棘手,因为它们允许将Descendent_A与Descendent_B进行比较,后者是两个不同的后代类。

比较运算符应根据需要在类中实现。许多课程不需要它们。另外,要注意实现它们或在基类中定义它们而不考虑继承的后果。

答案 2 :(得分:2)

对于适用的课程,我通常会在本地实施operator<operator==,因为它们在标准算法和容器中非常突出。

然后我就这些实现其他四个。

我有时会考虑的另一种方法是实现一个“比较”函数,该函数以1的样式返回0-1strcmp并实现所有其他运营商就此而言。我只会在operator<operator==看起来需要共享大部分相同的代码时执行此操作,而这些代码似乎不像我想的那么频繁。