C++ requires关键字简介

requires 是 C++20 中引入的一个新关键字,用于在函数模板或类模板中声明所需的一组语义要求,它可以用来限制模板参数,类似于 typenameclass 关键字。

requires关键字常与type_traits头文件下类型检查函数匹配使用,当requires后的表达式值为true时满足requires条件,代表由其修饰的函数/类的模板参数合法,可以正常使用

requires 关键字可以用于以下两种情况:

  • 在函数模板或成员函数中,使用 requires 关键字限制函数模板或成员函数的参数或返回值必须满足一定的语义要求。例如:
 

Copy

template <typename T> void print(T t) requires std::is_integral_v<T> { std::cout << t << std::endl; }

在这个例子中,使用 requires 关键字限制函数模板参数 T 必须是整数类型。

  • 在类模板或成员类中,使用 requires 关键字限制类模板或成员类必须满足一定的语义要求。例如:
 

Copy

template <typename T> requires std::is_integral_v<T> class IntContainer { public: IntContainer(T t) : value_{t} {} private: T value_; };

在这个例子中,使用 requires 关键字限制类模板参数 T 必须是整数类型。

需要注意的是,requires 关键字仅能用于函数模板和类模板中,不能用于非模板函数和非模板类。此外,requires 关键字的语义要求必须在编译时可验证,否则将引发编译时错误。

 

Copy

#include <iostream> class TestRequires { public: template <typename T> static void test(T t) requires std::is_integral_v<T> { std::cout << "test(T t) requires int" << std::endl; } template <typename T> static void test(T t) requires std::is_floating_point_v<T> { std::cout << "test(T t) requires float" << std::endl; } }; int main() { TestRequires::test(123); TestRequires::test(1.234); return 0; }

除此之外,requires关键字也可以用于类型转换前的检查(假如函数内需要):

 

Copy

template <typename T> int64_t unpack(T v) requires std::is_integral<T>::value {return static_cast<int64_t>(v);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/12809.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

激光雷达技术:科技之眼,照亮前行

在科技与人文关怀的交响乐章中&#xff0c;一项名为“蝙蝠避障”使用了激光雷达技术原理及应用的创新成果&#xff0c;正悄然改变着视障朋友们的生活方式&#xff0c;为他们的日常出行铺设了一条充满希望的光明之路。今天&#xff0c;让我们一起深入探讨这项技术如何成为盲人出…

深化市场布局与产业链整合,三清互联以创新为公司发展赋能

近年来&#xff0c;我国大力发展现代化电力体系&#xff0c;并不断推进智能电网的发展&#xff0c;电力物联网作为支撑电力行业数字化发展的关键基础设施&#xff0c;迎来了快速发展黄金时期。作为电力物联网领域领先企业之一&#xff0c;三清互联凭借敏锐的市场洞察力和技术创…

探索软件测试中的创新测试方法:测试左移

软件测试中的测试左移方法 在当今竞争激烈的市场中&#xff0c;满足客户的期望和需求是所有公司在竞争中成为市场领导者的关键。这就是为什么越来越多的公司现在转向测试左移&#xff0c;并将其应用于产品开发过程。 在本文中&#xff0c;我们将从初学者的角度来介绍测试左移…

cmd如何以管理员身份运行

打开开始菜单。 在搜索框中输入cmd。 在搜索结果中&#xff0c;找到cmd&#xff0c;右键单击&#xff0c;选择“以管理员身份运行”。 参考&#xff1a; cmd如何以管理员身份运行

2024最新大厂C++面试真题合集,大厂面试百日冲刺 bay10

字节后端 什么叫进程&#xff1f;什么叫线程&#xff1f;他俩有什么区别和联系&#xff1f; 进程是操作系统进行资源分配和调度的基本单位&#xff0c;是一个程序关于某数据集合上的一次运行活动&#xff0c;是系统进行资源分配和调度的独立单位。 线程是进程的一个执行流&am…

刷题之字母异位词(leetcode 哈希表)

https://leetcode.cn/problems/group-anagrams/ class Solution { public:vector<vector<string>> groupAnagrams(vector<string>& strs) {unordered_map<string,vector<string>>map;//哈希表键为排序后或者处理后的字符串&#xff0c;值为某…

(1)医疗图像处理:MRI磁共振成像-基本原理--(杨正汉

一、基本原理 1.组成 对应了解 1&#xff09;主磁体&#xff1a; 基本构建&#xff0c;用于产生磁场&#xff0c;主要有两种方式产生磁场永磁&#xff08;磁铁&#xff09;、电磁&#xff08;给线圈通电&#xff09;。MR按主磁场的场强分类主要有四类&#xff0c;分类的原因…

5.14学习总结

java聊天室项目 分片上传 将大文件切分为多个小的数据块&#xff08;通常大小为1MB~10MB&#xff09;&#xff0c;然后将这些小数据块分别上传至服务器&#xff0c;最后由服务器将这些小块组合成完整的文件。这种方式可以避免由于网络中断或超时而导致上传失败&#xff0c;并…

【PMP练习题】

PMP练习题 PMP练习题 PMP练习题 2、 [单选] 由于缺乏资金&#xff0c;一个项目在启动阶段被终止&#xff0c;项目经理必须对项目收尾。项目经理首先应该做什么&#xff1f; Due to lack of funding, a project is terminated during its initiation phase and the project man…

第83天: 代码审计-PHP 项目RCE 安全调试追踪代码执行命令执行

案例一&#xff1a;CNVD拿1day-RCE命令执行-百家CMS 这里用代码审计系统搜索system&#xff0c;可以利用的是第一种 打开看细节 查找函数引用 查找$_file第一次出现的地方 这个时候就明白了&#xff0c;必须上传文件&#xff0c;然后利用文件名&#xff0c;去执行system命令 …

Java项目:基于ssm框架实现的房屋租售网站管理系统(房屋租赁和房屋出售一体)(B/S架构+源码+数据库+毕业论文+开题+任务书)

一、项目简介 本项目是一套基于ssm框架实现的房屋租售网站管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、…

Hadoop Java API操作 及读取序列化文件(04-05-06)

针对于04-05-06班级整合。 1.创建java项目 2.修改pom.xml文件 添加依赖 <dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.1.4</version></dependenc…

【Linux网络编程】IO多路转接之poll

poll 1.poll初始2.poll函数接口3.poll服务器4.poll的优点缺点 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.poll初始 poll也是一种linux…

Unity设计模式之工厂模式

什么是工厂模式&#xff1f; 工厂是一种创建型设计模式。通俗来讲就是提供一种封装对象创建的方式&#xff0c;将对象的创建和使用区分开。就是Unity里面通常用到的创建和管理对象。 工厂模式有什么优点&#xff1f; 1、封装对象的创建方式&#xff0c;使其更加灵活、易于管理…

vue elementui时间选择器返回的时间转成年月日-格式

关键点&#xff1a;value-format“yyyy-MM-dd” <template><el-date-pickerv-model"date"type"date"placeholder"选择日期"format"yyyy-MM-dd"value-format"yyyy-MM-dd"></el-date-picker> </template…

【教学类-55-04】20240515图层顺序挑战(四格长条纸加黑色边框、4*4、7张,不重复5400张,16坐标点颜色哈希值去重、保留7色)

背景需求&#xff1a; 前文实现了7张色彩纸条加上黑色边框的需求。 【教学类-55-02】20240512图层顺序挑战&#xff08;四格长条纸加黑色边框、4*4、7张 、43200张去掉非7色有23040张&#xff0c;哈希算法快速去重剩余1221张&#xff09;-CSDN博客文章浏览阅读1k次&#xff0…

GPT-4o模型介绍和使用方法

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

9个优质免费视频素材网站推荐丨2024年最新资源合集

在短视频火爆的时代&#xff0c;高清、无水印、可商用的视频素材变得尤为重要。下面是我精心整理的9个常用免费视频素材网站&#xff0c;适合各类视频创作者。希望你能找到满意的素材&#xff01; 一、视频素材 1. 蛙学府 优点&#xff1a;丰富的正版商用素材&#xff0c;涵盖…

AI 绘画神器 Fooocus 高级用法:设置、风格、模型、高级设置

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里&#xff0c;订阅后可阅读专栏内所有文章。 大家好&#xff0c;我是水滴~~ 本文精选了一系列高级技巧和细致调整&#xff0c;旨在提升 Fooocus 用户在利用 Stable Diffusion 模型进行图像生成时的…

vue使用marked和highlight.js实现代码高亮效果

marked是对markdown进行解析的插件&#xff0c;它可以把markdown语法解析成html语法&#xff0c;从而实现页面效果&#xff0c;而highlight.js是对解析出的代码实现高亮效果 效果&#xff1a; 安装&#xff1a;避免踩我走的坑&#xff0c;安装尽量按照这个版本安装 npm install…