C++11的内容介绍
初始化
{}统一进行初始化。可以进行数组初始化,变量初始化,类成员,容器初始化,可以格式化函数初始化。基本上可以使用()东西差不多相同。
容器的赋值(包括初始化)都是通过这一个类型进行实现相关的内容。
int a ={10};
int b{10};
int c[]={1,2,34,54};
int d[]{1,2,3};
int e[10]{ 0 };
vector<int>{1,2,343,54,6};//基本上所有的容器都可以使用这个东西
声明
auto自动推导变量计算之后的相应的类型。
int a = 1;
int b = 1;
auto c = a + b;
直接获取类型变量的类型(函数的返回值也可以作为类型进行计算,但是全缺省的函数不会执行也不会返回值),使用typeid。直接表现
#include<typeinfo>
int a = 10;
cout << typeid(a).name() <<endl;
关键字decltype将变量的类型声明为表达式指定的类型,但是不会进行内容的初始化需要直接进行初始化。这里将p类型命名为duoble类型。
int a = 10;
duoble b = 10.1;
decltype(a + b)p;
新容器
最好使用的容器unordered_set,unordered_map(这个之前介绍过)
forward_list单项链表容器,进行相关的操作,与其他容器的使用规则基本上相同。
引用
现在有引用的不同位置信息。左值引用和右值引用
左值引用
就是之前的进行引用,引用a的地址。
int a = 10;
int *b = &a;
上面这个就是左值引用,这里对于a的引用。
右值引用
int a = 10;
int &&b = a;
数值10被右值引用之后,会开辟一个独立的空间储存10。a与b分别执行这一个空间。而且右值不可以进行引用。
使用move进行移动右值引用之后可以被引用了,并且a的资源被放置为空。
int &b = std::move(a);
这个被使用在函数返回值的过程之中,解决出现拷贝搞砸的问题,用来节省空间。
最开始的时候c98标准开始直接返回的过程增加一个拷贝构造,c++11使用右值引用进行改造,去掉拷贝构造这一个过程。
使用右值引用可以解决这个问题,去掉拷贝构造这一个部分。
总结STL容器在c++11都支持移动构造与赋值。
完美转发
因为只要使用过之后,无论是左右值,都变成左值。但是我们需要右值的这个情况所以需要完美转发这个东西。
但是引用类型的唯一作用就是限制了接收的类型,后续使用中都退化成了左值。
可以使用int && x,进行值的接受,而且相应的值没有改变(性质不会改变)!通常用在函数接受的过程之中(函数参数过程中),让值不会被退化成为左值。
可变模版参数
可以使用递归进行东西的输出,…省略参数。
args有多个参数,但是不知道有多少的个数字可以使用这个方法,进行数据的处理等相关的操作!