ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2019-10-07 12:08:12  阅读:321  来源: 互联网

标签:c20 c deprecated standards c-standard-library


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

标签:c20,c,deprecated,standards,c-standard-library
来源: https://codeday.me/bug/20191007/1866670.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有