文章分类 - C++11,14,17,20特性
摘要:在C++中模板参数列表展开,有多种处理方案,下面介绍几种常见的方法1.递归式展开:假设我们有一个需求,参数列表个数不确定,函数处理所有的参数参数。例如:fun(12,"hello",25.3,...);定义函数模板fun 1 template<typename... T> 2 void fun(T.
阅读全文
摘要:C++11中增加初始化列表类: std::initializer_list<>; 使用该类实现可变长的参数 1 void Test(std::initializer_list<int> s) { 2 for (auto p : s) { 3 // ... 4 } 5 } 这样可以实现指定类型的可变长
阅读全文
摘要:C++17新增语法,结构化绑定。将一个数据结构class或者struct结构化绑定到变量中。 结构化绑定使用auto 自动推导。不允许显示指定类型,下面的例子可能有所帮助: 1 std::array arr = { 12,13,14 }; 2 auto [x, y, z] = arr; // 结构化
阅读全文
摘要:C++17新增size()函数用于计算数组的大小,该函数在《array》中实现,是一个元函数。以下示例可能有用: 1 std::array<int, 10> s; 2 constexpr int m = std::size(s); 3 // m = 10 4 int arr[100] = {...}
阅读全文
摘要:C++11中使用了auto作为返回值的特性,auto由编译器在编译期间计算返回值类型。 1 auto Test(){ 2 return 1; 3 } auto作为函数返回值需要有以下几个条件满足: 1.所有的return语句返回的类型必须一致。 2.第一个return语句不能是递归语句。
阅读全文
摘要:C++有两种类型,一种是枚举类型,一种是强枚举类型,下面看一下普通的枚举类型 1 enum MyEnum 2 { 3 One, 4 Two 5 }; 这种枚举类型是暴露在全局下的,枚举变量不受限,可以直接使用,并且枚举类型的值,是一个整数类型,支持比较运算和算法运算,属于弱类型。 看一下强枚举类型:
阅读全文
摘要:在C++17中新增加一个特性,嵌套名称空间,在C++17之前都是通过以下方式进行嵌套的: 1 namespace MyCode { void fun(); 2 namespace Code { 3 void foo(); 4 } 5 } 看一下在C++17中新增的语法: 1 namespace My
阅读全文
摘要:C++模板编程 示例: 首先假设我们要传递以下模板函数: 1 template<typename T> 2 constexpr T Max(T _a, T _b) { 3 return _a > _b ? _a : _b; 4 } 编写接收该函数的函数模板 1 template<typename T
阅读全文
摘要:C++20新加了关键字concept 和 requires ,下面说一下这两个关键字是如何使用的。 首先说明的是,这两个关键字是针对模板的,非模板类型的函数,类,不能使用,下面我们看一段代码: template<typename C> concept check_iter = requires(C
阅读全文
摘要:今天尝试了C++20的模块的用法,模块的出现根据C++发布的标准文档中说明,是用来取代#include的,在我使用的一些场景中还有很多瑕疵,可能至今还未完善。下面就来说明一下模块的使用: 首先建立一个标准的C++项目,请不要使用预编译头。 建立main.cpp文件,键入正常的main函数。 下面就开
阅读全文
摘要:我们来解析一段代码: 1 template<class..._Ty> 2 using void_t = void; 3 4 template <class, class = void> 5 struct _Iterator_traits_base {}; // empty for non-itera
阅读全文