- 统一的列表初始化
- initializer_list
- 声明
- auto
- decltype
- nullptr
struct Point
{
int _x;
int _y;
Point(int x,int y)
:_x(x),_y(y){cout<<"1"<
private:
int _a;
public:
explicit A(int a)
:_a(a){}
};
//单参数类型支持隐式类型转换
void test2()
{
A aa(2);//单参数的类型,可以使用正常的方式
//A b=2;//也可以使用这种隐式类型的转换
//2拷贝构造一个A,在进行拷贝构造成b
//加一个explicit,就不能这样了
string s1="hjs";//string的构造函数没有加explicit
vector v;
v.push_back("hjk");//这也是隐式类型转换
}
void test1()
{
//以前
Point p={1,2};//c语言是使用这种方式来初始化
int brr[5]={1,2,3,4,5};//使用这种大括号进行初始化
//现在s
int a=1;
int b={2};//现在还可以这样进行初始化,=也省略了
int c{3};
int arr[5]{1,2,3,4};
Point k{1,2};
int * ptr=new int[5]{1,2,3};//初始化了前3个值,后面的值全都是0
Point* ptrd=new Point[2]{{1,1},{2,2}};//现在还可以这样进行初始化,里面必须要又两个{}
//new要去调用他的构造函数
//正常调用point
Point p1(1,2);//调用构造函数
//c++11支持的多参数的构造函数
Point p2={1,2};
Point p3{1,2};
}
initializer_list
auto il={1,2,3};
void test3()
{
//都是因为支持initializer_list的构造函数
//以前的vector初始化
vector v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
vector v2={1,2,3,4};//现在vector也可以这样初始化, 掉的就是initializer list进行初始化
initializer_list lt={1,2,3};//
list l={1,2,3};//链表也可以这样初始化
map dic={{"dasd","dsa"},{"dsada","fd"}};//map也可以
v2={10,20,30};//也可以用赋值,不是构造,在赋值运算符重载那里使用了initialzer_list
for(auto e:v2)
{
cout<
List(initializer_list ilt) //使用initializer_list进行初始化
{
_head = new Node; //无参构造
_head->_next = _head; //因为是双向链表
_head->_prev = _head;
typename initializer_list::iterator it=ilt.begin();
while(it!=ilt.end())
{
PushBack(*it);
it++;
}
}
声明
auto
自动推导类型,范围for
decltype
推导对象的类型,可以作为模板参数
int func(int a)
{
return a;
}
void test4()
{
const int x=10;
cout< dict={{"sort","排序"},{"insert","插入"}};
auto it=dict.begin();
auto cpit=it;
//但是不能把auto作为模板参数
vector v;//这样就很方便
v.push_back(it);
}
nullptr
避免了NULL 定义为0



