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

北京市住房和城乡建设管理委员会网站/网络服务提供者知道或者应当知道

北京市住房和城乡建设管理委员会网站,网络服务提供者知道或者应当知道,购物商城外贸网站建设,wordpress导入xls掌握C20的革命性特性:Concepts C20 的新特性 C20 引入了 Concepts,这是一种用于限制类和函数模板的模板类型和非类型参数的命名要求。Concepts 是作为编译时评估的谓词,用于验证传递给模板的模板参数。Concepts 的主要目的是使模板相关的编…

掌握C++20的革命性特性:Concepts

C++20 的新特性

C++20 引入了 Concepts,这是一种用于限制类和函数模板的模板类型和非类型参数的命名要求。Concepts 是作为编译时评估的谓词,用于验证传递给模板的模板参数。Concepts 的主要目的是使模板相关的编译器错误更易于人类阅读。

我们都遇到过这样的情况:当为类或函数模板提供错误的参数时,编译器会输出数百行错误信息。要从这些编译器错误中找到根本原因并不总是容易的。Concepts 允许编译器在某些类型约束不满足时输出更易读的错误消息。因此,为了获得有意义的语义错误,建议编写模拟语义要求的 Concepts。避免仅针对语法方面而没有任何语义意义的 Concepts 验证,例如,仅检查类型是否支持 operator+ 的 Concept。这样的 Concept 只会检查语法,而不是语义。例如 std::string 支持 operator+,但显然,它与整数的 operator+ 有完全不同的含义。另一方面,如 sortable(可排序)和 swappable(可交换)等 Concepts 是模拟一些语义意义的好例子。

注意:编写 Concepts 时,请确保它们模拟语义,而不仅仅是语法。

Concepts 的语法

定义 Concepts 的通用语法如下:

template <parameter-list> concept concept-name = constraints-expression;

它以熟悉的 template<> 规范开始,但与类和函数模板不同,Concepts 永远不会被实例化。接下来,使用一个新关键字 concept,后跟 Concept 的名称。你可以使用任何你想要的名称。constraints-expression 可以是任何常量表达式,即任何可以在编译时评估的表达式。约束表达式必须产生布尔值。约束永远不会在运行时评估。约束表达式将在下一节中详细讨论。

Concept 表达式的语法如下:

concept-name<argument-list>

Concept 表达式评估为真或假。如果评估为真,则称给定的模板参数模拟了该 Concept。

Constraints Expression

常量表达式

可直接用作 Concept 定义约束的布尔常量表达式必须精确地计算为布尔值,不进行任何类型转换。例如:

template <typename T>
concept C = sizeof(T) == 4;

Requires 表达式

Requires 表达式的语法如下:

requires (parameter-list) { requirements; }

参数列表是可选的。每个要求必须以分号结束。有四种类型的要求:简单要求、类型要求、复合要求和嵌套要求。

简单要求

简单要求是任意不以 requires 开头的表达式语句。例如,以下 Concept 定义规定了某种类型 T 必须支持后缀和前缀 ++ 操作符:

template <typename T>
concept Incrementable = requires(T x) {x++;++x;
};
类型要求

类型要求验证某种类型是否有效。例如,以下 Concept 要求某种类型 T 具有 value_type 成员:

template <typename T>
concept C = requires {typename T::value_type;
};
复合要求

复合要求用于验证某事物不抛出异常,以及/或验证某个方法返回特定类型。例如,以下 Concept 验证给定类型具有标记为 noexcept 的 swap() 方法:

template <typename T>
concept C = requires (T x, T y) {{ x.swap(y) } noexcept;
};
嵌套要求

Requires 表达式可以包含嵌套要求。例如,这里是一个要求类型大小为 4 字节并支持前缀和后缀增量和减量操作的 Concept:

template <typename T>
concept C = requires (T t) {requires sizeof(t) == 4;++t;--t;t++;t--;
};

Requires 表达式可以有多个参数,并且可以由一系列要求组成。例如,以下 Concept 要求类型 T 的实例是可比较的:

template <typename T>
concept Comparable = requires(const T a, const T b) {{ a == b } -> convertible_to<bool>;{ a < b } -> convertible_to<bool>;// ... 对其他比较操作符的类似要求 ...
};

组合 Concept 表达式

使用逻辑运算符组合

现有的 Concept 表达式可以通过使用逻辑运算符“与”(&&)和“或”(||)来组合。例如,假设您有一个类似于 Incrementable 的 Decrementable Concept;以下示例展示了一个要求类型同时具备增量和减量能力的 Concept:

template <typename T>
concept IncrementableAndDecrementable = Incrementable<T> && Decrementable<T>;

预定义的标准 Concepts

标准库中的 Concepts

标准库定义了一系列预定义的 Concepts,分为多个类别。以下列表给出了每个类别中的一些示例 Concepts,所有这些都在 <concepts> 头文件和 std 命名空间中定义:

  • 核心语言 Conceptssame_asderived_fromconvertible_tointegralfloating_pointcopy_constructible 等。
  • 比较 Conceptsequality_comparabletotally_ordered 等。
  • 对象 Conceptsmovablecopyable 等。
  • 可调用 Conceptsinvocablepredicate 等。

此外,<iterator> 头文件定义了与迭代器相关的 Concepts,如 random_access_iteratorforward_iterator 等,还定义了算法要求,如 mergeablesortablepermutable 等。

C++20 范围库还提供了一些标准 Concepts。第17章《理解迭代器和范围库》详细讨论了迭代器和范围,而第20章更深入地探讨了标准库提供的算法。

使用标准 Concepts

如果这些标准 Concepts 满足您的需求,您可以直接使用它们,无需自己实现。例如,以下 Concept 要求类型 T 是从类 Foo 派生的:

template <typename T>
concept IsDerivedFromFoo = derived_from<T, Foo>;

以下 Concept 要求类型 T 可以转换为 bool

template <typename T>
concept IsConvertibleToBool = convertible_to<T, bool>;

这些标准 Concepts 也可以组合成更具体的 Concepts。例如,以下 Concept 要求类型 T 既是默认构造的也是可拷贝构造的:

template <typename T>
concept DefaultAndCopyConstructible = default_initializable<T> && copy_constructible<T>;

注意:编写完整且正确的 Concepts 并不总是容易的。如果可能,尝试使用现有的标准 Concepts 或它们的组合来约束您的类型。

相关文章:

掌握C++20的革命性特性:Concepts

掌握C20的革命性特性&#xff1a;Concepts C20 的新特性 C20 引入了 Concepts&#xff0c;这是一种用于限制类和函数模板的模板类型和非类型参数的命名要求。Concepts 是作为编译时评估的谓词&#xff0c;用于验证传递给模板的模板参数。Concepts 的主要目的是使模板相关的编…...

win11开机后频繁刷新桌面,任务栏不显示,文件资源管理器explorer报错ntdll.dll

win11 开机后桌面频繁刷新&#xff0c;cpu 暴涨&#xff0c;任务栏不出现。 不知道是安装了什么软件还是系统升级造成的&#xff0c;好长时间不重启电脑了&#xff0c;然后重启了下电脑。 结果就是&#xff1a; 现象描述 重启后 输入密码进入后 变得巨慢。好久才进入的桌面。…...

解决Git添加.gitignore文件后不生效的问题

1. 问题描述 如上图所示&#xff0c;在已存在.gitignore文件且已经提交过的Git管理的项目中&#xff0c;其中.class、.jar文件以及.idea目录内的内容全部都还是被Git管理了&#xff0c;可见.gitignore文件并没有生效。 2. 原因发现 .gitignore文件只能作用于 Untracked Files…...

Shell Linux学习笔记

注意&#xff1a;该文章摘抄之百度&#xff0c;仅当做学习笔记供小白使用&#xff0c;若侵权请联系删除&#xff01; 目录 什么是shell ? Linux正则匹配 grep tar与unzip echo history 重定向 shell 单双引号 位置参数 预定义变量 运算 正则表达式 字符截取命令 …...

kingbase常用SQL总结之锁等待信息

锁信息与等待事件 分析kingbase&#xff08;pg&#xff09;数据库锁等待、死锁时需要我们准确的定位等锁或者死锁相关的事务。关于获取锁等待信息或者死锁信息已有经典的SQL可以直接使用&#xff0c;但是需要我们先了解sql语句获取的每个字段的意义。 获取到锁等待事务不能完全…...

「优选算法刷题」:长度最小的子数组

一、题目 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0 。 示例 1&#xff1a; 输…...

RuoYi-Cloud本地部署--详细教程

文章目录 1、gitee项目地址2、RuoYi-Cloud架构3、本地部署3.1 下载项目3.2 idea打开项目3.3 启动nacos3.4 若依数据库准备3.5 启动redis3.6 修改nacos中的各个模块的配置文件3.7 启动ruoyi前端项目3.8 启动各个微服务模块 4、启动成功 1、gitee项目地址 https://gitee.com/y_p…...

如何优雅的发布一个 TypeScript 软件包?

向 NPM 发布软件包本身并不是一个特别困难的挑战。但是&#xff0c;配置你的 TypeScript 项目以取得成功可能是一个挑战。你的软件包能在大多数项目上运行吗&#xff1f;用户能否使用类型提示和自动完成功能&#xff1f;它能与 ES Modules (ESM) 和 CommonJS (CJS) 风格的导入一…...

总结的太到位:python 多线程系列详解

前言&#xff1a; 上vip课的时候每次讲到框架的执行&#xff0c;就会有好学的同学问用多线程怎么执行&#xff0c;然后我每次都会说在测开课程会详细讲解&#xff0c;这并不是套路&#xff0c;因为如果你不理解多线程&#xff0c;不清楚什么时候该用什么时候不该用&#xff0c;…...

惬意上手Python —— 装饰器和内置函数

1. Python装饰器 Python中的装饰器是一种特殊类型的函数&#xff0c;它允许用户在不修改原函数代码的情况下&#xff0c;增加或修改函数的行为。 具体来说,装饰器的工作原理基于Python的函数也是对象这一事实&#xff0c;可以被赋值给变量、作为参数传递给其他函数或者作为其他…...

python 调用dll

在Python中&#xff0c;可以使用ctypes库来调用DLL文件。ctypes库是一个标准库&#xff0c;用于在Python中加载共享库&#xff08;例如DLL文件&#xff09;并调用其中的函数。 以下是一个简单的示例&#xff0c;演示如何使用ctypes库调用DLL文件中的函数&#xff1a; import c…...

docker里Java服务执行ping命令模拟流式输出

文章目录 业务场景处理解决实现ping功能并实时返回输出实现长ping和中断请求docker容器找不到ping命令处理 业务场景 我们某市的客户&#xff0c;一直使用CS版本的信控平台&#xff0c;直接安装客户Windows server服务器上&#xff0c;主要对信号机设备进行在线管理、方案配时…...

代码随想录算法训练营第十三天| 239. 滑动窗口最大值 、347.前 K 个高频元素

239. 滑动窗口最大值 思路&#xff1a; 用遍历区间的元素时&#xff0c;维护一个单调队列&#xff0c;从大到小排列。 要找到最大值&#xff0c;实际单调队列保存区间内最大值及最大值右侧的第二大值&#xff08;用于当前最大值处于区间左端&#xff0c;在区间右移时更新临时最…...

旋转花键的使用寿命与机械原理分析

旋转花键是一种传动部件&#xff0c;广泛应用于各种机械设备中。对于厂商来说&#xff0c;如何保证使用寿命是重中之重&#xff0c;而旋转花键的使用寿命与其机械原理密切相关&#xff0c;了解其机械原理有助于更好地维护和使用旋转花键&#xff0c;从而提高其使用寿命。 旋转花…...

互联网摸鱼日报(2024-01-22)

互联网摸鱼日报(2024-01-22) 开源中国资讯 Stability AI 推出更小、更高效的 1.6B 语言模型 X 正面向 Android 推出音频和视频通话 Extism —— WebAssembly 插件实现框架 Gitee 推荐 | 龙蜥社区最佳安全加固实践指南 security-benchmark 每日一博 | 得物云原生容器技术探…...

CentOS 7 安装配置MySQL

目录 一、安装MySQL​编辑​编辑 1、检查MySQL是否安装及版本信息​编辑 2、卸载 2.1 rpm格式安装的mysql卸载方式 2.2 二进制包格式安装的mysql卸载 3、安装 二、配置MySQL 1、修改MySQL临时密码 2、允许远程访问 2.1 修改MySQL允许任何人连接 2.2 防火墙的问题 2…...

Gold-YOLO(NeurIPS 2023)论文与代码解析

paper&#xff1a;Gold-YOLO: Efficient Object Detector via Gather-and-Distribute Mechanism official implementation&#xff1a;https://github.com/huawei-noah/Efficient-Computing/tree/master/Detection/Gold-YOLO 存在的问题 在过去几年里&#xff0c;YOLO系列已经…...

多个coco数据标注文件合并

一、coco数据集是什么&#xff1f; COCO&#xff08;Common Objects in Context&#xff09;是一个用于目标检测和图像分割任务的标注格式。如果你有多个COCO格式的JSON文件&#xff0c;你可能需要将它们合并成一个文件&#xff0c;以便更方便地处理和管理数据。在这篇博客中&…...

Kubernetes(K8S)拉取本地镜像部署Pod 实现类似函数/微服务功能(可设置参数并实时调用)

以两数相加求和为例&#xff0c;在kubernetes集群拉取本地的镜像&#xff0c;实现如下效果&#xff1a; 1.实现两数相加求和 2.可以通过curl实时调用&#xff0c;参数以GET方式提供&#xff0c;并得到结果。&#xff08;类似调用函数&#xff09; 一、实现思路 需要准备如下的…...

k8s使用ingress实现应用的灰度发布升级

v1是1.14.0版本nginx ,实操时候升级到v2是1.20.0版本nginx&#xff0c;来测试灰度发布实现过程 一、方案&#xff1a;使用ingress实现应用的灰度发布 1、服务端&#xff1a;正常版本v1&#xff0c;灰度升级版本v2 2、客户端&#xff1a;带有请求头versionv2标识的请求访问版…...

最新热门商用GPT4.0带MJ绘画去授权版本自定义三方接口(开心版)

一台VPS 搭建宝塔 解析域名 上传程序至根目录 访问首页在线安装配置数据库 PHP版本选择:7.3 安装完成后访问网站首页即可&#xff01; 配置APIKEY&#xff0c;登录网站后台自定义配置&#xff0c;不然网站无法使用&#xff01; 网站后台地址/admin 默认账号:admin 密码…...

Halcon基于形状的模板匹配inspect_shape_model

Halcon基于形状的模板匹配 基于形状的匹配&#xff0c;就是使用目标对象的轮廓形状来描述模板。Halcon中有操作助手&#xff0c;可以直观 地进行形状模板匹配的参数选择以及效果测试。如果使用算子编写&#xff0c;步骤如下。 &#xff08;1&#xff09;从参考图像上选择检测的…...

html中根元素以及根元素字体的含义

在 HTML 中&#xff0c;根元素是指 <html> 标签&#xff0c;可以使用 CSS 来设置根元素的字体大小。根元素的字体大小会影响整个页面的文本内容&#xff0c;默认情况下&#xff0c;根元素的字体大小是浏览器默认的大小。 要设置根元素的字体大小&#xff0c;你可以使用 …...

51单片机1-6

目录 单片机介绍 点亮一个LED 流水灯参考代码 点亮流水LEDplus版本 独立按键 独立按键控制LED亮灭 静态数码管 静态数码管显示 动态数码管显示 模块化编程 调试工具 矩阵键盘 矩阵键盘显示数据 矩阵键盘密码锁 学习B站江协科技课程笔记。 安装keil&#xff0c;下…...

vue2(Vuex)、vue3(Pinia)、react(Redux)状态管理

vue2状态管理Vuex Vuex 是一个专为 Vue.js应用程序开发的状态管理模式。它使用集中式存储管理应用的所有组件的状态&#xff0c;以及规则保证状态只能按照规定的方式进行修改。 State&#xff08;状态&#xff09;:Vuex 使用单一状态树&#xff0c;即一个对象包含全部的应用层…...

用户画像项目背景

1,用户画像项目介绍 大数据平台简介 数据仓库+用户画像+推荐系统 (1)数据仓库:加快数据的分析和查询 数据仓库分层:ODS层(映射HDFS的数据)—DW(数据仓库层)–APP(层)—BI(层) DW:DWD明细数据层(数据的清洗和转换),DWM(轻度聚合层),DWS(高度聚合),APP(层),DIM(层) …...

Go使用记忆化搜索的套路【以20240121力扣每日一题为例】

题目 分析 这道题很明显记忆化搜索&#xff0c;用py很容易写出来 Python class Solution:def splitArray(self, nums: List[int], k: int) -> int:n len(nums)# 寻找分割子数组中和的最小的最大值s [0]for num in nums:s.append(s[-1] num)#print(s)cachedef dfs(cur,…...

【LeetCode】每日一题 2024_1_21 分割数组的最大值(二分)

文章目录 LeetCode&#xff1f;启动&#xff01;&#xff01;&#xff01;题目&#xff1a;分割数组的最大值题目描述代码与解题思路 LeetCode&#xff1f;启动&#xff01;&#xff01;&#xff01; 今天是 hard&#xff0c;难受&#xff0c;还好有题解大哥的清晰讲解 题目&a…...

bevy the book 20140118翻译(全)

源自&#xff1a;Bevy Book: Introduction 主要用 有道 翻译。 Introduction 介绍 Getting Started 开始 Setup 设置 Apps 应用程序 ECS Plugins 插件 Resources 资源 Next Steps 下一个步骤 Contributing 贡献 Code 代码 Docs 文档 Building Bevys Ecosystem 构建 b…...

MySQL数据库面试知识点

1、数据库基础&#xff1a; MySQL是一个开源的关系型数据库管理系统&#xff0c;用于存储、管理和检索数据。它支持多种存储引擎&#xff0c;包括InnoDB、MyISAM等。MySQL是由瑞典公司MySQL AB开发&#xff0c;后来被Sun Microsystems收购&#xff0c;最终被甲骨文公司(Oracle…...