18.1

18.1 复习前面介绍过的C++11功能

新类型

long long
unsigned long long
以支持64位或更宽的整型
char16_t
char32_t
以支持16位和32位的字符表示

统一的初始化

使用初始化列表时, 可添加等号也可以不添加。
可以用于new表达式中。
创建对象时可以使用大括号而不是圆括号调用构造函数。
如果有类将模板std::initializer_list作为参数的构造函数, 则只有该构造函数可以使用列表初始化。(?)

缩窄

初始化列表表语法可以防止缩窄, 即禁止将数值赋给无法存储它的数值变量。 常规初始化允许执行可能没有意义的操作。
但初始化列表允许转换为更宽的类型。

std::initializer_list

C++11提供的模板类
如果有类将模板std::initializer_list作为参数的构造函数, 则只有该构造函数可以使用列表初始化。

声明

C++11提供了多种简化声明的功能。
auto
自动类型推断——要求进行显式初始化。
还可以简化模板声明。
decltype
将变量的类型声明为表达式指定的类型。
decltype(x) y; // y的类型和x相同
在模板定义时特别有用:
decltype(T * U) tu; // 不能提前知道T和U的类型
比auto复杂。指定的类型可以为引用和const

返回类型后置

在函数名或者参数后面指定返回值类型。
auto eff(T t, U u) -> decltype(T * U)
解决问题:在遇到eff的参数列表之前, T和U还不在作用域内, 因此要在之后使用decltype。

模板别名:using =