C++ 11新特性之大括号初始化详解
本文主要给大家介绍了关于C++11新特性之大括号初始化的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:
C++11之前,C++主要有以下几种初始化方式:
//小括号初始化 stringstr("hello"); //等号初始化 stringstr="hello"; //大括号初始化 structStudnet{ char*name; intage; }; Studnets={"dablelv",18};//纯数据(PlainofData,POD)类型对象 StudnetsArr[]={{"dablelv",18},{"tommy",19}};//POD数组
虽然c++03提供了多样的对象初始化方式,但不能提供自定义类型对象的大括号初始化方式,也不能在使用new[]的时候初始化POD数组。
幸好,C++11扩充了大括号初始化功能,弥补了C++03的不足。
classTest{ inta; intb; public: C(inti,intj); }; Testt{0,0};//C++11only,相当于Testt(0,0); Test*pT=newTest{1,2};//C++11only,相当于Test*pT=newTest{1,2}; int*a=newint[3]{1,2,0};//C++11only
此外,C++11大括号初始化还可以应用于容器,终于可以摆脱push_back()调用了,C++11中可以直观地初始化容器了:
//C++11containerinitializer vectorvs={"first","second","third"}; map singers={{"LadyGaga","+1(212)555-7890"},{"BeyonceKnowles","+1(212)555-0987"}};
因此,可以将C++11提供的大括号初始化作为统一的初始化方式,既降低了记忆难度,也提高的代码的统一度。
此外,C++11中,类的数据成员在申明时可以直接赋予一个默认值:
classC { private: inta=7;//C++11only };
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。
参考文献
[1]C++11新特性