本文主要给大家介绍了关于C++11新特性之大括号初始化的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:
C++11之前,C++主要有以下几种初始化方式:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
//小括号初始化 string str( "hello" ); //等号初始化 string str= "hello" ; //大括号初始化 struct Studnet{ char * name; int age; }; Studnet s={ "dablelv" ,18}; //纯数据(Plain of Data,POD)类型对象 Studnet sArr[]={{ "dablelv" ,18},{ "tommy" ,19}}; //POD数组 |
虽然c++03提供了多样的对象初始化方式, 但不能提供自定义类型对象的大括号初始化方式,也不能在使用new[]的时候初始化POD 数组。
幸好,C++11扩充了大括号初始化功能,弥补了C++03的不足。
1
2
3
4
5
6
7
8
9
|
class Test{ int a; int b; public : C( int i, int j); }; Test t{0,0}; //C++11 only,相当于 Test t(0,0); Test* pT= new Test{1,2}; //C++11 only,相当于 Test* pT=new Test{1,2}; int * a = new int [3]{ 1, 2, 0 }; //C++11 only |
此外,C++11大括号初始化还可以应用于容器,终于可以摆脱 push_back()
调用了,C++11中可以直观地初始化容器了:
1
2
3
|
// C++11 container initializer vector<string> vs={ "first" , "second" , "third" }; map<string,string> singers ={ { "Lady Gaga" , "+1 (212) 555-7890" },{ "Beyonce Knowles" , "+1 (212) 555-0987" }}; |
因此,可以将C++11提供的大括号初始化作为统一的初始化方式,既降低了记忆难度,也提高的代码的统一度。
此外,C++11中,类的数据成员在申明时可以直接赋予一个默认值:
1
2
3
4
5
|
class C { private : int a=7; //C++11 only }; |
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。
参考文献
[1]C++ 11 新特性
原文链接:http://blog.csdn.net/k346k346/article/details/55194246