为什么在C 20中不推荐使用std :: rel_ops ::运算符?

根据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,它将推断出正确的排序类型.

上一篇:膜拜大牛!最全Android面试知识点梳理,真香!


下一篇:使用已弃用的homebrew / php在OSX上安装适用于PHP 5.6的PHP扩展