根据cppreference.com,将在C 20中弃用std :: rel_ops :: operator!=,>,< =,> =.
背后的理由是什么?
解决方法:
在C 20中,你得到three-way comparison(运算符< =>),如果提供的话自动“生成”default comparisons:
struct A {
// You only need to implement a single operator.
std::strong_ordering operator<=>(const A&) const;
};
// Compiler generates all 6 relational operators
A to1, to2;
if (to1 == to2) { /* ... */ } // ok
if (to1 <= to2) { /* ... */ } // ok, single call to <=>
与std :: rel_ops相比,三向比较有多个优点,这可能是为什么不推荐使用std :: rel_ops运算符的原因.在我的头顶:
>它更通用,因为取决于运算符的返回类型< => (std :: strong_ordering,std :: weak_ordering,…),只生成相关的运算符.有关更多信息,请参见<compare>
标题.
>通过使用命名空间std :: rel_ops,您不会带来一堆模板化的运算符重载.
>您可以要求编译器通过默认为它生成三向运算符(自动运算符< =>(A const&)=默认值) – 这基本上会生成基类和非静态数据成员的字典比较,如果返回类型为auto,它将推断出正确的排序类型.