| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> C++20四大之三:concept特性详解 -> 正文阅读 |
|
[C++知识库]C++20四大之三:concept特性详解 |
前言:C++模板的演进 据Stroustrup先生回忆, 对模板的设想早在1982年便有了,正式提出是在1998年的 USENIX C++ conference会议上提出,设计模板的初衷是因为当时的C++缺少一个标准库,而当时没有模板的C++很难设计出“vector、list”这种适用于多种类型的容器。
SFINAE特性为上述代码的运作提供了保障。两个模板的特化构造了递归的退出条件,“隐式”的实现了if判断的功能。到了C++17,有了if constexpr,上面这段代码可以写的更加“直白”
不管是SFINAE、std::enable_if、还是if constexpr,其实都在做一件事:使编译期if的使用更加直白易用。编译期if可以用来判断数值,如fibonacci模板,更多的时候是用来判断“类型”,std::enable_if便是如此。
func有一个重载,func的内部逻辑需要区分value的类型:enum跟数值类型分开处理。为了使编译器能够在实例化时匹配到正确的函数模板,我们用std::enable_if_t这一长串的代码,功能实现了,但代码十分冗长、可读性不好。
函数模板equal返回两个值是否相等,这个操作不能用在浮点类型中。为防止该模板被float等浮点类型实例化,使用一个Integral concept来约束T——也就是强制保证该模板只能使用整数类型实例化。
equal(0.11, 0.33) 会在编译时报错: 2,我们为什么需要concept
使用concept约束T,比使用enable_if更加简洁、符合自然语义。 3,约束T的四种方式
第二种无疑是最简洁、最符合自然语义的写法了。后两种使用了requires关键字,这种方式称为“require-clause”(require子句),可以方便的组合多个concept:
4,内置concept
值得注意的是,concept的定义,不能递归、不能在定义时被其他concept约束
若concept的template-parameter-list声明的形参大于一个,则使用concept时实参列表需比形参列表少1:
6,requires关键字
使用requires-expression可以定义逻辑非常复杂的concept,()内是参数列表——是可省略的,{}内是约束列表。约束列表中的表达式会在编译器检查其合法性(并不是求表达式的值,只是做一个可行性检查),结果是true或者false。若约束列表中的表达式都能通过,则本条requires表达式的值为true。在本例中,x+y; 约束并不会真的相加求值,而是要求x与y是“可相加的”。
后语:
|
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 0:17:59- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |