使用一个东西,却不明白它的道理,不高明!
这里记录的是侯捷老师《C++11/14新特性》课程的笔记。
主要包括语言层面如Variadic Template 和 标准库层面如 type_traits的内容。
Variadic Template 数量不定的模板参数
编号3的函数一定要定义,不然会出错。即要实现递归调用的边界函数。
用Variadic Template 实现 class Tuple
上图中, typename Head::type 在 int等基础类型时,会报错。因为int没有::type。
改进方案如下:
好吧,返回值直接写 Head就行
Uniform Initialization 一致性初始化
统一用{} 初始化对象
从下图的注释中可以看出:创建对象时,先创建一个initializer_list的对象,当类有以 initializer_list为参数的构造函数时,直接把创建的对象传递给构造函数;当没有这类的构造函数时,把创建的对象,拆分开逐个赋值。
关键字 explicit
在C++2.0以前,explicit 修饰构造函数,即告诉编辑器不要做隐式转换。下图中,左边,编译不报错,在+5时,执行Complex(5)的转换。右边,因为有 explicit关键字限制,编译报错。
using 关键字的用途
decltype 关键字的三个作用
- 用在声明返回值类型
- 用于表示lambda