C++17新特性
文章平均质量分 80
C++17新特性介绍
_jackcc
求知
展开
-
C++17新特性:使用折叠表达式实现辅助函数
自C++11起,加入了变长模板参数包,能让函数结构任意数量的参数。有时,这些参数都组合成一个表达式,从中得 出函数结果。C++17中使用折叠表达式,可以让这项任务变得更加简单。首先,实现一个函数,用于将所有参数进行累加:2.那么现在我们拥有一个参数包ts ,并且函数必须将参数包展开,然后使用表达式进行求和。原创 2022-12-30 09:50:37 · 321 阅读 · 0 评论 -
C++17新特性:只有头文件的库中启用内联变量
这种库在声明函数时,始终是内联的,C++17中允许声明内联变量。C++17之前只能使用其他变通的方法实现内联变 量,新标准的支持让实现只有头文件的库更加的容易。本节中,我们创建一个类,可以作为典型头文件库的成员。其目的就是给定一个静态成员,然后使用inline 关键字对其进行修饰,使得其实例在全局范围内都能访问到,在C++17之前这样做是不可能的。2.多个.cpp 文件中包含这个头文件时,链接阶段会出错。瞧,就是这样!原创 2022-12-29 15:55:05 · 323 阅读 · 0 评论 -
C++17新特性-使用constexpr-if简化编译
模板化编程中,通常要以不同的方式做某些事情,比如特化模板类型。C++17带了constexpr-if 表达式,可以在很多情况下简化代码。本节中,我们会实现一个很小的辅助模板类。它能处理不同模板类型的特化,因为它可以在完全不同的代码中,选取 相应的片段,依据这些片段的类型对模板进行特化:1.完成代码中的通用部分。2.假设类型T 是std::vector ,而类型U 是int。这里就有问题了,为整个vector 添加整数是为了什么呢?其应该是对vector 中的每个元素加上一个整型数。原创 2022-12-29 15:51:47 · 334 阅读 · 0 评论 -
C++17新特性-使用constexpr-if简化编译
模板化编程中,通常要以不同的方式做某些事情,比如特化模板类型。C++17带了constexpr-if 表达式,可以在很多情况下简化代码。本节中,我们会实现一个很小的辅助模板类。它能处理不同模板类型的特化,因为它可以在完全不同的代码中,选取 相应的片段,依据这些片段的类型对模板进行特化:1.完成代码中的通用部分。2.假设类型T 是std::vector ,而类型U 是int。这里就有问题了,为整个vector 添加整数是为了什么呢?其应该是对vector 中的每个元素加上一个整型数。原创 2022-12-29 15:48:04 · 343 阅读 · 0 评论 -
C++17新特性-构造函数自动推导模板的类型
C++中很多类都需要指定类型,其实这个类型可以从用户所调用的构造函数中推导出来。不过,在C++17之前,这是 一个未标准化的特性。C++17能让编译器自动的从所调用的构造函数,推导出模板类型。使用最简单的方法创建std::pair 和std::tuple 实例。其可以实现一步创建。原创 2022-12-29 15:44:07 · 545 阅读 · 0 评论 -
C++17新特性-新的括号初始化规则
C++17括号初始化变量新规则原创 2022-12-29 15:35:55 · 1010 阅读 · 0 评论 -
C++17新特性-将变量作用域限制在if和switch区域内
将变量的生命周期尽可能的限制在指定区域内,是一种非常好的代码风格。有时我们需要在满足某些条件时获得某个 值,然后对这个值进行操作。为了让这个过程更简单,C++17中为if和switch配备了初始化区域。这个案例中,我们使用初始化语句,来了解下其使用方式:switch :这个例子看起来像是从玩家输入的字母决定某个游戏中的行为。原创 2022-12-29 15:31:26 · 476 阅读 · 0 评论 -
C++17新特性-使用结构化绑定来解包绑定的返回值
与C的语法特征不同,将复杂结构体作为返回值传回会耗费大量的时间,因为对象需要在返回函数中进行初始化,之后将这个对象拷贝到相应容器中返回给调用端。对于现代编译器来说,这种想法不再是正确的了,这里编译器并没有刻意避免拷贝过程,而是优化了这个过程。使用结构化绑定时,就不能再使用std::tie创建虚拟变量了,所以我们不得不绑定所有值到命名过的变量上。对部分成员进行绑定的做法是高效的,因为编译器可以很容易的对未绑定的变量进行优化。另外,本例也展示了一种在std::tie中有,而结构化绑定没有的功能:可以使用。原创 2022-12-29 10:56:19 · 592 阅读 · 0 评论