C++11/14新特性(侯捷) 学习笔记

318 阅读1分钟

使用一个东西,却不明白它的道理,不高明!

这里记录的是侯捷老师《C++11/14新特性》课程的笔记。

主要包括语言层面如Variadic Template 和 标准库层面如 type_traits的内容。

Variadic Template 数量不定的模板参数

编号3的函数一定要定义,不然会出错。即要实现递归调用的边界函数。

image.png

用Variadic Template 实现 class Tuple

image.png

上图中, typename Head::type int等基础类型时,会报错。因为int没有::type

改进方案如下:

image.png

好吧,返回值直接写 Head就行

image.png

Uniform Initialization 一致性初始化

统一用{} 初始化对象

从下图的注释中可以看出:创建对象时,先创建一个initializer_list的对象,当类有以 initializer_list为参数的构造函数时,直接把创建的对象传递给构造函数;当没有这类的构造函数时,把创建的对象,拆分开逐个赋值。

image.png

关键字 explicit

在C++2.0以前,explicit 修饰构造函数,即告诉编辑器不要做隐式转换。下图中,左边,编译不报错,在+5时,执行Complex(5)的转换。右边,因为有 explicit关键字限制,编译报错。 image.png

using 关键字的用途

image.png

image.png

decltype 关键字的三个作用

  • 用在声明返回值类型

image.png

  • 用于表示lambda

image.png

lambda函数的一个例子

image.png