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。