需要哪些比较运算符来定义或隐含定义?

时间:2014-02-15 12:05:10

标签: c++

如果我定义operator ==和operator =<所有其他运营商都可以在逻辑上暗示。

enter image description here

enter image description here

enter image description here

编译器是否为我处理这个问题,还是我必须自己编写它?

2 个答案:

答案 0 :(得分:1)

不,它不会,如果你打算使用它们,你也必须超载它们。

它甚至不知道a != b实际上是!(a==b)

答案 1 :(得分:0)

没有;标准必须假设你希望所有的操作员都遵循这个数学规则的分支,并且没有权利这样做。

但是,在某些情况下,这样的规则用于简化实现。例如,std::map键的默认比较器为std::less - 其中基础树实现需要知道键 A 是否大于或等于键 B < / em>,逻辑被重新调整为 B 键是否小于 A ;这样,只需要一个比较器。