C++20 Concept(概念)语法简介
2021/12/18 17:49:39
本文主要是介绍C++20 Concept(概念)语法简介,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
快速上手
#include <iostream> using namespace std; // 定义Addable概念,要求类型可以进行加运算 template <typename T> concept Addable = requires (T x) { x + x; }; // 要求类型T具有Addable特性 template <typename T> requires Addable<T> void f(T x) { return x + x + x; } int main() { cout << f<int>(10) << endl; //通过 cout << f<vector>(vector()) << endl; // 编译不通过 return 0; }
concept和requires子句
可以像定义函数一样定义requires子句,编译时会检查类型T是否满足子句内所有语句的语法
template <typename T> concept Addable = requires (T x) { x + x; };
标准库中的concept
对于常见的concept,C++标准库提供了,如整数概念
template <typename T> concept Integer = std::is_integral<T>::value;
concept的组合
可以使用 &&
和 ||
来组合两个概念,正如字面意思
#include <iostream> using namespace std; // 加法 template <typename T> concept Addable = requires (T x) { x + x; }; // 小于等于 template <typename T> concept Comparable = requires (T x) { x <= 2; }; template <typename T> requires Addable<T> && Comparable<T> //同时使用Addable和Comparable T fib(T x) { return x<=2? x : fib(x-1)+fib(x-2); } int main() { cout << fib<int>(20) << endl; return 0; }
concept不是为了给代码增加障碍
尽管上面的例子中的Addable看起来就是在为传参增加一道门槛,但Addable这种concept不是ISO C++制定concept这个语法的初衷,甚至是典型的违背初衷的concept:
与语法限制相反,指定有意义语义的能力是真正的概念的决定性特征。
这篇关于C++20 Concept(概念)语法简介的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-01使用 SVN合并操作时,怎么解决冲突的情况?-icode9专业技术文章分享
- 2025-01-01告别Anaconda?试试这些替代品吧
- 2024-12-31自学记录鸿蒙API 13:实现人脸比对Core Vision Face Comparator
- 2024-12-31自学记录鸿蒙 API 13:骨骼点检测应用Core Vision Skeleton Detection
- 2024-12-31自学记录鸿蒙 API 13:实现人脸检测 Core Vision Face Detector
- 2024-12-31在C++中的双端队列是什么意思,跟消息队列有关系吗?-icode9专业技术文章分享
- 2024-12-31内存泄漏(Memory Leak)是什么,有哪些原因和优化办法?-icode9专业技术文章分享
- 2024-12-31计算机中的内存分配方式堆和栈有什么关系和特点?-icode9专业技术文章分享
- 2024-12-31QT布局器的具体使用原理和作用是什么?-icode9专业技术文章分享
- 2024-12-30用PydanticAI和Gemini 2.0构建Airflow的AI助手