今天我正在实现一种数据类型,我决定重载比较运算符。在这样做时,一个问题突然出现在我脑海中。
作为一名程序员,为什么我必须定义每一个比较运算符,我所做的就是用'<'
来定义它们(见下文)? - 也就是说,为什么编译器不会自动为我生成这些。
a == b => !(a<b || b<a)
a != b => (a<b || b<a)
a > b => b < a
a >= b => !(a < b)
a <= b => !(b < a)
我确实理解,出于性能原因完全合理,想要实现的不仅仅是'<'
。
我知道明显的答案是,因为我可以自己轻松地做到这一点,但我相信编译器/语言规范应该尽一切可能轻松使用该语言。
答案 0 :(得分:3)
了解std::rel_ops
。没有人使用它。
答案 1 :(得分:3)
定义operator<()
和operator==()
以及
#include <utility>
using namespace std::rel_ops;
然后自动定义所有比较运算符。 请参阅cppreference.com
提供的示例答案 2 :(得分:2)
您可以使用boost::operators。它完全符合您的要求,而且还有更多。