当前位置:首页 > 科技  > 软件

C++20那些事之宇宙飞船运算符

来源: 责编: 时间:2024-07-12 17:20:00 52观看
导读本节将引入C++20的另一个知识点:宇宙飞船运算符/三向比较运算符。三种排序三向比较运算符<=>又称为宇宙飞船运算符,返回值有三种排序,下面从gcc源码角度来深入聊一下。注:懒人版,本节示例已更新星球。用法:<=>#include <com

本节将引入C++20的另一个知识点:宇宙飞船运算符/三向比较运算符。hTF28资讯网——每日最新资讯28at.com

三种排序

三向比较运算符<=>又称为宇宙飞船运算符,返回值有三种排序,下面从gcc源码角度来深入聊一下。hTF28资讯网——每日最新资讯28at.com

注:懒人版,本节示例已更新星球。hTF28资讯网——每日最新资讯28at.com

用法:<=>hTF28资讯网——每日最新资讯28at.com

#include <compare>#include <iostream>int main() {   auto c1 = 1.1 <=> 2.2;   auto c2 = -1 <=> 1;   std::cout << typeid(c1).name() << std::endl;   std::cout << typeid(c2).name() << std::endl;}

输出:hTF28资讯网——每日最新资讯28at.com

St16partial_orderingSt15strong_ordering
  1. 1.1 <=> 2.2:这是对两个浮点数进行比较。对于浮点数,标准库返回的是std::partial_ordering,因为浮点数有NaN值的存在,这使得它们之间的比较不是严格的全序。std::partial_ordering允许结果是<、>、==或者unordered。

我们可以使用gcc代码静态变量来查看partial_ordering到底是小于、大于、等于、无序:hTF28资讯网——每日最新资讯28at.com

static const partial_ordering less;static const partial_ordering equivalent;static const partial_ordering greater;static const partial_ordering unordered;

如果我们强制转换便会报错:hTF28资讯网——每日最新资讯28at.com

comp.cc:6:36: error: conversion from 'std::partial_ordering' to non-scalar type 'std::strong_ordering' requested    6 |   std::strong_ordering c1 = 1.1 <=> 2.2;
2. `-1 <=> 1`:这是对两个整数进行比较。对于整数,标准库返回的是`std::strong_ordering`,因为整数的比较是严格的全序关系,没有不确定的情况。`std::strong_ordering`只会返回`<`、`>`或`==`。

同理,可以使用下面4个静态成员。hTF28资讯网——每日最新资讯28at.com

static const strong_ordering less;static const strong_ordering equal;static const strong_ordering equivalent;static const strong_ordering greater;

因此,c1的类型是std::partial_ordering,而c2的类型是std::strong_ordering,这也解释了为什么输出的类型不一样。hTF28资讯网——每日最新资讯28at.com

除了partial_ordering、strong_ordering之外,<=>还可能返回weak_ordering,静态成员为:hTF28资讯网——每日最新资讯28at.com

static const weak_ordering less;static const weak_ordering equivalent;static const weak_ordering greater;

equal与equivalent

在上面的三种ording可以看到对于等于出现了两个:equal与equivalent,这两者有什么区别呢?hTF28资讯网——每日最新资讯28at.com

这里直接看cppreference,两者之间没有区别。然而,std::strong_ordering 是唯一定义相等的类别。所有其他类别仅定义等价。也正好验证了上面的静态成员,对于string_ordering有两个,其他的只有equivalent。hTF28资讯网——每日最新资讯28at.com

如果比较在被比较的项目之间产生强排序,则等价和相等是相同的。之所以有两个词来表示它,是因为这对于其他类型的排序是不一样的。弱和部分根本没有相等性;它们只提供等价性。hTF28资讯网——每日最新资讯28at.com

等价意味着两个对象可以比较相等。相等意味着更强的东西;如果它们比较相等,则可以在任何 const 用法中用一个替换另一个:只要 a == b 为真,f(a) == f(b) 的属性就为真,其中 f 表示仅读取可通过参数的公共 const 成员访问的比较突出状态的函数。如果类型的比较允许相等(这是强排序的要求),那么它也允许等价。因此,对于强排序比较,它们是相同的。hTF28资讯网——每日最新资讯28at.com

https://en.cppreference.com/w/cpp/utility/compare/strong_orderinghTF28资讯网——每日最新资讯28at.com

为什么使用三向比较运算符?

三向比较运算符(<=>)使得在一次操作中就能够确定两个值的排序关系,而传统的比较运算符则需要多次比较。hTF28资讯网——每日最新资讯28at.com

传统比较运算符的限制:hTF28资讯网——每日最新资讯28at.com

  • 如果 a == b 为假,你无法知道 a < b 还是 a > b。
  • 如果 a != b 为真,你无法知道 a < b 还是 a > b。
  • 如果 a < b 为假,你无法知道 a == b 还是 a > b。
  • 如果 a > b 为假,你无法知道 a == b 还是 a < b。
  • 如果 a <= b 为真,你无法知道 a == b 还是 a < b。
  • 如果 a >= b 为真,你无法知道 a == b 还是 a > b。

这些限制表明,传统的比较运算符不能一次性确定两个值的完全关系,而是需要多次比较来获得完整的结果。hTF28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-100712-0.htmlC++20那些事之宇宙飞船运算符

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 统计学入门:时间序列分析基础知识详解

下一篇: 聊聊2024年Rust加密生态系统

标签:
  • 热门焦点
  • MIX Fold3包装盒泄露 新机本月登场

    MIX Fold3包装盒泄露 新机本月登场

    小米的全新折叠屏旗舰MIX Fold3将于本月发布,近日该机的真机包装盒在网上泄露。从图上来看,新的MIX Fold3包装盒在外观设计方面延续了之前的方案,变化不大,这也是目前小米旗舰
  • 如何正确使用:Has和:Nth-Last-Child

    如何正确使用:Has和:Nth-Last-Child

    我们可以用CSS检查,以了解一组元素的数量是否小于或等于一个数字。例如,一个拥有三个或更多子项的grid。你可能会想,为什么需要这样做呢?在某些情况下,一个组件或一个布局可能会
  • 三万字盘点 Spring 九大核心基础功能

    三万字盘点 Spring 九大核心基础功能

    大家好,我是三友~~今天来跟大家聊一聊Spring的9大核心基础功能。话不多说,先上目录:图片友情提示,本文过长,建议收藏,嘿嘿嘿!一、资源管理资源管理是Spring的一个核心的基础功能,不
  • 自动化在DevOps中的力量:简化软件开发和交付

    自动化在DevOps中的力量:简化软件开发和交付

    自动化在DevOps中扮演着重要角色,它提升了DevOps的效能。通过自动化工具和方法,DevOps团队可以实现以下目标:消除手动和重复性任务。简化流程。在整个软件开发生命周期中实现更
  • 自律,给不了Keep自由!

    自律,给不了Keep自由!

    来源 | 互联网品牌官作者 | 李大为编排 | 又耳 审核 | 谷晓辉自律能不能给用户自由暂时不好说,但大概率不能给Keep自由。近日,全球最大的在线健身平台Keep正式登陆港交所,努力
  • 小米公益基金会捐赠2500万元驰援北京、河北暴雨救灾

    小米公益基金会捐赠2500万元驰援北京、河北暴雨救灾

    8月2日消息,今日小米科技创始人雷军在其微博上发布消息称,小米公益基金会宣布捐赠2500万元驰援北京、河北暴雨救灾。携手抗灾,京冀安康!以下为公告原文
  • Counterpoint :OPPO双旗舰战略全面落地 高端产品销量增长22%

    Counterpoint :OPPO双旗舰战略全面落地 高端产品销量增长22%

    2023年6月30日,全球行业分析机构Counterpoint Research发布的《中国智能手机高端市场白皮书》显示,中国智能手机品牌正在寻求高质量发展,中国高端智能
  • 联想的ThinkBook Plus下一版曝光,键盘旁边塞个平板

    联想的ThinkBook Plus下一版曝光,键盘旁边塞个平板

    ThinkBook Plus 是联想的一个特殊笔记本类别,它在封面放入了一块墨水屏,也给人留下了较为深刻的印象。据有人爆料,联想的下一款 ThinkBook Plus 可能更特殊,它
  • onebot M24巧系列一体机采用轻薄机身设计,现已在各平台开售

    onebot M24巧系列一体机采用轻薄机身设计,现已在各平台开售

    onebot M24 巧系列一体机目前已在线上线下各平台同步开售。onebot M24 巧系列采用一体化轻薄机身设计,最薄处为 10.15mm,拥有宝石红、午夜蓝、石墨绿、雅致
Top