当前位置: 首页 > news >正文

C++20三向比较运算符详解

三向比较运算符可以用于确定两个值的大小顺序,也被称为太空飞船操作符。使用单个表达式,它可以告诉一个值是否等于,小于或大于另一个值。

它返回的是类枚举(enumeration-like)类型,定义在 <compare>std 名称空间中。其运算的结果如下:

数据类型含义
如果操作数为整数类型,其结果称为 强排序(strong_ordering)strong_ordering::less左边的操作数小于右边的操作数
strong_ordering::greater左边的操作数大于右边的操作数
strong_ordering::equal左边的操作数等于右边的操作数
如果操作数为浮点类型,其结果称为 偏序(partial_ordering)partial_ordering::less左边的操作数小于右边的操作数
partial_ordering::greater左边的操作数大于右边的操作数
partial_ordering::equivalent左边的操作数等于右边的操作数
partial_ordering::unordered无法比较时(有一个非数字)
如果操作数为自己实现的类型,称为 弱排序(weak_ordering)weak_ordering::less左边的操作数小于右边的操作数
weak_ordering::greater左边的操作数大于右边的操作数
weak_ordering::equivalent左边的操作数等于右边的操作数

三向比较运算符的用法

三向比较运算符的使用方式如下:

#include <iostream>using namespace std;int main() {int i{ 11 };strong_ordering result{ i <=> 0 };cout << typeid(result).name() << endl;if (result == strong_ordering::less) { cout << "less" << endl; };if (result == strong_ordering::greater) { cout << "greater" << endl; };if (result == strong_ordering::equal) { cout << "equal" << endl; };return 0;
}

可以得到以下的输出结果

struct std::strong_ordering
greater

同时,<compare> 还提供了一些函数来解释排序结果,有以下几种:std::is_eq()is_neq()is_lt()is_lteq()is_gt()is_gteq()

使用的方式如下:

#include <iostream>
#include <compare>
using namespace std;int main() {int i{ 11 };strong_ordering result{ i <=> 0 };cout << typeid(result).name() << endl;if (is_lt(result)) { cout << "less" << endl; };if (is_gt(result)) { cout << "greater" << endl; };if (is_eq(result)) { cout << "equal" << endl; };return 0;
}

三向比较运算符的作用

在编写自己的类时,如果需要实现比较运算符,在 C++20 之前,通常要重载 6 个比较运算符:(><<=>===, !=)。在 C++20 引入了三向比较运算符以后,就可以只重载 <=>== 后,其他的运算符会由编译器为我们生成。(在 C++20 中,重载了 == 后,!= 也会自动重载)

以下是使用示例:

#include <iostream>
#include <compare>
using namespace std;class MyClass {
public:MyClass(int ini) : _data{ ini } {}auto operator<=>(const MyClass& other) const {return this->_data <=> other._data;}auto operator==(const MyClass& other) const {return this->_data == other._data;}
private:int _data;
};int main() {MyClass a{ 10 }, b{ 20 };if (a < b) {cout << "a < b" << endl;}if (a != b) {cout << "a != b" << endl;}return 0;
}

可以得到以下的运算结果:

a < b
a != b

相关文章:

C++20三向比较运算符详解

三向比较运算符可以用于确定两个值的大小顺序&#xff0c;也被称为太空飞船操作符。使用单个表达式&#xff0c;它可以告诉一个值是否等于&#xff0c;小于或大于另一个值。 它返回的是类枚举&#xff08;enumeration-like&#xff09;类型&#xff0c;定义在 <compare> …...

监听机制与耗电量

一、监听机制与耗电量的关系 监听机制通常涉及对特定事件、状态或数据的持续监测。在移动设备和嵌入式系统中&#xff0c;这种监听可能由多种组件和传感器实现&#xff0c;如GPS、传感器&#xff08;如加速度计、陀螺仪&#xff09;、网络连接等。监听的频率越高&#xff0c;意…...

C++ //练习 16.29 修改你的Blob类,用你自己的shared_ptr代替标准库中的版本。

C Primer&#xff08;第5版&#xff09; 练习 16.29 练习 16.29 修改你的Blob类&#xff0c;用你自己的shared_ptr代替标准库中的版本。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 template <typename> class BlobP…...

【Mode Management】CanNm处于PBS状态下接收到一帧诊断报文DCM会响应吗

目录 前言 正文 1.CanNm从RSS状态切换到PBS状态行为分析 1.1.CanNm动作 1.2.ComM动作 1.3.DCM动作 1.4 小结 2.CanNM在PBS状态下收到一帧诊断报文行为分析 2.1.DCM动作1 2.2. ComM动作 2.3. DCM动作2 2.3. CanNm动作 2.4 问题 2.5 分析 3.总结 前言 我们知道EC…...

【C++】模版:范式编程、函数模板、类模板

目录 一.范式编程 二.函数模板 1.概念与格式 2.原理 3.实例化 4.匹配规则 三.类模板 一.范式编程 在写C函数重载的时候&#xff0c;可能会写很多同一类的函数&#xff0c;例如交换函数&#xff1a; void Swap(int& left, int& right) {int temp left;left r…...

验证图片旋转

最近在使用百度图片翻译时遇到一个问题&#xff0c;就是图片会翻转90&#xff0c;经与百度沟通&#xff0c;发现是原始图片中有个旋转参数引起的。 于是写个demo验证一下。 // 获取元数据中的旋转方向 func getOrientation() int {//打开图像文件f, err : os.Open("image…...

宏景eHR /ajax/ajaxService SQL注入漏洞复现

0x01 产品简介 宏景eHR人力资源管理软件是一款人力资源管理与数字化应用相融合,满足动态化、协同化、流程化、战略化需求的软件。 0x02 漏洞概述 宏景eHR /ajax/ajaxService 接口处存在SQL注入漏洞,,未经身份验证的远程攻击者通过利用SQL注入漏洞配合数据库xp_cmdshell可…...

从源码看 Redis:深入理解 redisDb 和 redisObject

Redis 是一个广泛使用的内存数据库&#xff0c;以其高性能和丰富的数据结构而闻名。不同于磁盘数据库&#xff0c;磁盘数据库将数据读取到文件中维护&#xff0c;而内存数据库将数据存储在内存中&#xff0c;意味着其想要维护数据&#xff0c;必须在代码中维护一个保存数据的结…...

unity中实现流光效果——世界空间下

Properties{_MainTex ("Texture", 2D) "white" {}_FlowColor ("Flow Color", Color) (1, 1, 1, 1) // 流光颜色_FlowFrequency ("Flow Frequency", Float) 1.0 // 流光频率_FlowSpeed ("Flow Speed", Float) 1.0 // 流光…...

项目经验分享:用4G路由器CPE接海康NVR采用国标GB28181协议TCP被动取流一段时间后设备就掉线了

最近我们在做一个生态化养殖的项目时&#xff0c;发现一个奇怪的现象&#xff1a; 项目现场由于没有有线网络&#xff0c;所以&#xff0c;我们在现场IPC接入到海康NVR之后&#xff0c;再通过一款4G的CPE接入到天翼云的国标GB28181视频平台&#xff1b;我们采用UDP协议播放NVR…...

【RabbitMQ】RabbitMQ不公平分发_预取值

一、不公平分发 1、简介 RabbitMQ中的不公平分发&#xff08;Unfair Dispatch&#xff09;是指当多个消费者&#xff08;Consumers&#xff09;同时订阅同一个队列&#xff08;Queue&#xff09;时&#xff0c;消息的分发机制并非严格平均或公平&#xff0c;而是基于某些条件…...

最新AI模型使用指南和模型

市面上最好的AI大模型 OpenAI GPT-4&#xff1a; 概述&#xff1a;GPT-4 是 OpenAI 发布的最新一代大型语言模型&#xff0c;具备更强的理解和生成自然语言的能力。特点&#xff1a; 强大的文本生成和理解能力。支持多语言处理。可用于各种应用场景&#xff0c;如对话生成、内容…...

数据结构之八大基本排序方法

在数据结构中&#xff0c;排序是一个重要的操作&#xff0c;它有助于提高数据的可读性和可操作性。排序算法有多种&#xff0c;各有优缺点&#xff0c;适用于不同的场景。以下是八大经典排序算法的介绍&#xff1a; 1. 冒泡排序&#xff08;Bubble Sort&#xff09; 原理&…...

《Milvus Cloud向量数据库指南》——什么是高可用:深入理解数据库系统中的高可用性架构

什么是高可用:深入理解数据库系统中的高可用性架构 在信息技术日新月异的今天,高可用性(High Availability,简称HA)已成为衡量一个系统,尤其是数据库系统稳定性和可靠性的重要标准。高可用性的核心目标在于确保系统能够持续不断地提供服务,最大限度地减少因维护活动、硬…...

C++ | Leetcode C++题解之第319题灯泡开关

题目&#xff1a; 题解&#xff1a; class Solution { public:int bulbSwitch(int n) {return sqrt(n 0.5);} };...

C# 使用 NLog 输出日志到文件夹

在项目中使用 NuGet 安装 NLog 包以及 NLog.Config 包 配置 nlog.config 在项目的根目录下创建一个 Nlog.config 文件&#xff08;如果还没有&#xff09;&#xff0c;然后添加如下配置&#xff1a; <?xml version"1.0" encoding"utf-8" ?> <…...

node.js使用NodeMachineID 生成唯一UUID和注意事项

node-machine-id用于获取或生成唯一的机器ID 如何使用 const { machineId, machineIdSync } require(node-machine-id) JSON.stringify(machineIdSync({original: true})) ;方法&#xff1a; machineIdSync 此函数同步获取操作系统本机UUID/GUID&#xff0c;默认情况下进行哈…...

AI大模型在数据治理中的应用

目前&#xff0c;企业的数据治理工作以人工实施为主&#xff0c;其中一些重复性较强的工作&#xff0c;如&#xff1a;数据标准制定和映射、元数据信息完善、数据目录挂载等&#xff0c;需要消耗大量的人力和时间成本&#xff0c;这给本来就难以量化业务价值的治理工作的顺利推…...

【初学人工智能原理】【12】循环:序列依赖问题

前言 本文教程均来自b站【小白也能听懂的人工智能原理】&#xff0c;感兴趣的可自行到b站观看。 代码及工具箱 本专栏的代码和工具函数已经上传到GitHub&#xff1a;1571859588/xiaobai_AI: 零基础入门人工智能 (github.com)&#xff0c;可以找到对应课程的代码 正文 对于…...

【QT】无法打开QT的ui文件,出现闪退情况

打开qt的ui文件出现闪退的情况&#xff1a; 解决办法&#xff1a;点击扩展-Qt VS Tools-Options 找到Qt General中的Qt Designer 的Run in detached window改为True。...

20吨燃气蒸汽锅炉实力厂家/支持上门安装调试

燃气蒸汽锅炉&#xff0c;认准源头实力厂家&#xff0c;不仅能买到品质过硬的设备&#xff0c;更能享受到省心便捷的上门安装调试服务&#xff0c;免去自行安装的繁琐与隐患&#xff0c;让设备快速投入平稳运行。我们作为深耕锅炉制造行业的实力厂家&#xff0c;具备正规生产资…...

CTF是什么?一文带你读懂网络安全大赛

CTF是什么&#xff1f;一文带你读懂网络安全大赛 前言 随着大数据、人工智能的发展&#xff0c;人们步入了新的时代&#xff0c;逐渐走上科技的巅峰。 科技是一把双刃剑&#xff0c;网络安全不容忽视&#xff0c;人们的隐私在大数据面前暴露无遗&#xff0c;账户被盗、资金损失…...

NSudo:Windows权限管理的神兵利器与系统级操作革命

NSudo&#xff1a;Windows权限管理的神兵利器与系统级操作革命 【免费下载链接】NSudo [Deprecated, work in progress alternative: https://github.com/M2Team/NanaRun] Series of System Administration Tools 项目地址: https://gitcode.com/gh_mirrors/ns/NSudo 在…...

轻量级百度搜索结果获取解决方案:让数据获取不再复杂

轻量级百度搜索结果获取解决方案&#xff1a;让数据获取不再复杂 【免费下载链接】python-baidusearch 自己手写的百度搜索接口的封装&#xff0c;pip安装&#xff0c;支持命令行执行。Baidu Search unofficial API for Python with no external dependencies 项目地址: http…...

动态规划详解:从入门到精通,这四个案例让你彻底掌握DP思想

面试必考、算法进阶的核心&#xff0c;一篇文章帮你打通任督二脉在算法学习的过程中&#xff0c;动态规划&#xff08;Dynamic Programming&#xff0c;简称DP&#xff09;绝对是让很多人头疼的一个难点。很多初学者看到DP问题就发怵&#xff0c;其实只要掌握了核心思想&#x…...

避坑指南:ESTUN Editor安装后,TP虚拟示教器bricks.ini配置文件到底在哪?

ESTUN Editor安装后TP虚拟示教器配置文件定位全解析 当你在工业机器人编程中同时安装了ESTUN Editor集成环境和独立TP软件包时&#xff0c;最让人头疼的问题莫过于找不到正确的bricks.ini配置文件。这个问题看似简单&#xff0c;却直接影响着虚拟示教器与机器人控制器的连接稳定…...

s2-pro音色复用效果实测:不同参考音频时长(3s/10s/30s)对合成质量影响

s2-pro音色复用效果实测&#xff1a;不同参考音频时长&#xff08;3s/10s/30s&#xff09;对合成质量影响 1. 引言 s2-pro作为Fish Audio开源的专业级语音合成模型镜像&#xff0c;其音色复用功能在实际应用中表现如何&#xff1f;本文将针对一个关键问题展开实测&#xff1a…...

ChromePass终极指南:3分钟找回Chrome浏览器所有保存密码

ChromePass终极指南&#xff1a;3分钟找回Chrome浏览器所有保存密码 【免费下载链接】chromepass Get all passwords stored by Chrome on WINDOWS. 项目地址: https://gitcode.com/gh_mirrors/chr/chromepass 你是否曾在Chrome浏览器中保存了重要账号密码&#xff0c;却…...

PyTorch 2.8镜像部署教程:从零配置到运行Llama3-70B 4bit量化推理完整指南

PyTorch 2.8镜像部署教程&#xff1a;从零配置到运行Llama3-70B 4bit量化推理完整指南 1. 环境准备与快速部署 在开始之前&#xff0c;请确保您的硬件配置满足以下最低要求&#xff1a; 显卡&#xff1a;NVIDIA RTX 4090D 24GB显存内存&#xff1a;120GB以上存储&#xff1a…...

从零部署RK3588 MPP:硬编解码环境搭建与核心工具解析

1. RK3588 MPP硬编解码环境搭建全流程 第一次在ArmSoM-W3开发板上折腾RK3588的MPP硬编解码环境时&#xff0c;我踩了不少坑。这里把完整搭建过程拆解成可复现的步骤&#xff0c;用最直白的语言分享给各位开发者朋友。 MPP&#xff08;Media Process Platform&#xff09;是瑞芯…...