C++ primer -- 第 18 章 探讨 C++ 新标准
终于到了《C++primer》最后的一章,本次内容依然是仅供自己的复习所用。本次的内容如下:
移动语义和右值引用
Lambda表达式
包装器模版function
可变参数模版
1.C++11功能
新功能
C++新增了long long和 unsigned longlong.
统一的初始化
初始化列表
int x = {5};
double y = {2.75};
short quar[5] {2, 5, 2, 76, 1};
new初始化int ar = new int [4] {2, 4, 6, 7};
注意:
初始化列表语法可防止缩窄,但是可以转化为更宽的类型。
char c1 = 1.57e27; //double to char, undefinde behavior
char c2 = 46477878;//int to char, undefined behavior
char c1 {66}; //int-to-char, in range, allowed
double c2 = {66}; // int-to-double, allowed
std::initializer list
vector<int> a1(10);
vector<int> a2{10}; // initializer-list a2 has 1 element set to 10
vector<int> a3{4, 6, 1}; // 3 elements set 4, 6 ,1
//包含头文件的ini=tializer_list
#include <initializer_list>
double sum(std::initializer_list<double> i1)
int main()
{
double total = sum({2.5, 3. 1. 4);
...
}
声明
1.auto
关键字auto是一个存储了警说明符,用于自动类型推断
2.decltype
将变量的类型声明为表达式指定的类型,如下
decltype(x) y;//让y的类型与x相同
3.返回类型后置
在函数名和参数后面指定返回类型:
double f1(double, int); //traditional syntax
auto f2(double, int) -> double; //new syntax, return type is double
4.模版别名 using =
之前的c++语法typedef std::vector<std::string>::iterator itType;
C++ 11新语法`using itType = std::vector<std::string> iterator;
5.nullptr
空指针的表示
作用域内枚举
enum old1{yes, no, maybe}; // traditonal form
enum class New1 {never, somtime, often, always}; // new form
enum struct New2 {new, lever};// new form
需要使用时,使用New1::never和New2::never等。
对类的修改
2.右值引用和移动语义
对大多数程序员来说,右值引用带来的主要好处是能够利用右值引用来实现移动语义的库代码。
评论