C++20草案中的宇宙飞船运算符(<=>,spaceship operator)
2024-10-18 23:18:41
C++20草案中的宇宙飞船运算符(<=>,spaceship operator)
Herb Sutter
提议的新三路运算符<=>
已经被合入C++20草案中。
宇宙飞船运算符(hh)形式如lhs<=>rhs
。
比如a与b是整型,那么a<=>b
返回std::strong_ordering
类型的纯右值(prvalue,不能取地址那种):
- 如果
a<b
,(a<=>b)返回std::strong_ordering::less
- 如果
a>b
,(a<=>b)返回std::strong_ordering::greater
- 如果
a与b全等/相等
,(a<=>b)返回std::strong_ordering::equal
如果a b是浮点值,就返回的是std::partial_ordering::less/greater/equivalent
或者std::partial_ordering::unordered
(如果ab中有一个NaN)
标准还有更多规定,比如a与b是指针,a与b是枚举等,详细内容请参见更多
最后,std::strong_ordering
和std::partial_ordering
的值定义如下:
+--------------------------------------------------------------------+
| | Numeric values | Non-numeric |
| Category +-----------------------------------+ |
| | -1 | 0 | +1 | values |
+------------------+------+------------+---------------+-------------+
| strong_ordering | less | equal | greater | |
| weak_ordering | less | equivalent | greater | |
| partial_ordering | less | equivalent | greater | unordered |
| strong_equality | | equal | nonequal | |
| weak_equality | | equivalent | nonequivalent | |
+------------------+------+------------+---------------+-------------+
也就是说,返回的是0/1/-1
,还记得strcmp(stra,strb)
吧,<=>
设计理念之一正是基于这种函数,如果a<=>b
且a==3 && b==3
,那么a<=>b
就等于0
更多
http://open-std.org/JTC1/SC22/WG21/docs/papers/2017/p0515r0.pdf
https://en.cppreference.com/w/cpp/language/operator_comparison
最新文章
- Python3基础 把一个列表中内容给另外一个列表,形成两个独立的列表
- ServiceStack.Redis之IRedisClient<;第三篇>;
- MYSQL数据库性能调优之二:定位慢查询
- cdev_init函数
- iPhone、iPad默认按钮样式问题
- DEDE提高生成HTmL的速度
- js数组操作-打乱数组
- java 一款可以与ssm框架完美整合的web报表控件
- my new day in CNblog
- iOS 应用打包命令一览
- python数据包之利器scapy用法!
- LeetCode第十题-正则表达式匹配
- 商品规格,自定义SKU类型
- 工业以太网EtherNet/IP协议安全分析整理
- algernon 基于golang 的独立的支持redis lua pg。。。 的web server
- Python 编程快速上手 第五章总结
- SASS对css的管理
- 【Socket】linux高性能网络服务程序
- CentOS7.4 删除virbr0 virbr0-nic虚拟网卡
- 第4章 文件和目录(5)_贯穿案例2:mini shell(1)
热门文章
- SSM框架整合(Spring+SrpingMVC+Mybatis) 简单案例
- 刷题向》关于搜索+tarjan的奇怪组合题 BZOJ1194 (normal+)
- php安装memcache
- Python程序调试-TabError: inconsistent use of tabs and spaces in indentation
- 19. AUTO INCREMENT 字段
- 第一章Python简介
- eclipse——Maven创建JavaWeb工程
- CodeBlocks调试功能(转)
- Cloud Design Patterns: Prescriptive Architecture Guidance for Cloud Applications
- Bitmap类、BitmapFactory及BitmapFactory类中的常用方法