如果我定义operator ==和operator =<所有其他运营商都可以在逻辑上暗示。
编译器是否为我处理这个问题,还是我必须自己编写它?
答案 0 :(得分:1)
不,它不会,如果你打算使用它们,你也必须超载它们。
它甚至不知道a != b
实际上是!(a==b)
。
答案 1 :(得分:0)
没有;标准必须假设你希望所有的操作员都遵循这个数学规则的分支,并且没有权利这样做。
但是,在某些情况下,这样的规则用于简化实现。例如,std::map
键的默认比较器为std::less
- 其中基础树实现需要知道键 A 是否大于或等于键 B < / em>,逻辑被重新调整为 B 键是否小于 A ;这样,只需要一个比较器。