C++11新特性——大括号初始化
2017-02-15 14:12
543 查看
C++11之前,C++主要有以下几种初始化方式:
虽然C++03提供了多样的对象初始化方式, 但不能提供自定义类型对象的大括号初始化方式,也不能在使用new[]的时候初始化POD 数组。幸好,C++11扩充了大括号初始化功能,弥补了C++03的不足。
此外,C++11大括号初始化还可以应用于容器,终于可以摆脱 push_back() 调用了,C++11中可以直观地初始化容器了:
因此,可以将C++11提供的大括号初始化作为统一的初始化方式,既降低了记忆难度,也提高的代码的统一度。
此外,C++11中,类的数据成员在申明时可以直接赋予一个默认值:
//小括号初始化 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的不足。
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中可以直观地初始化容器了:
// 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中,类的数据成员在申明时可以直接赋予一个默认值:
class C { private: int a=7; //C++11 only };
参考文献
[1]C++ 11 新特性相关文章推荐
- C++11新特性——大括号初始化
- C++11新特性学习笔记—使用花括号就地初始化
- C++11新标准学习之花括号初始化列表
- C++11部分特性之“auto”、“一致性初始化”、“Range - Based for循环” 与STL的简单试验
- C++11新特性之新类型与初始化
- C++11新特性之新类型与初始化
- C++11 新特性(5) 统一初始化
- C++11特性:列表初始化:VS2010中vector<string>的初始化方式
- C++11新特性之列表初始化
- C++11特性(5):explicit、列表初始化
- C++11 新特性 braced-init-list (List Initialization) 列表初始化
- 【C++】C++11特性:初始化、hash容器和随机数生成器
- C++11特性--作用域内枚举,显式转换符,类内成员初始化
- C++11新特性之新类型与初始化
- C++11特性(2):快速初始化变量、final和override、模版函数
- C++11特性--统一的初始化,std::initializer_list
- 如何在C++11中正确的初始化静态常量成员数组
- C++11的语法新特性
- C++开发者都应该使用的10个C++11特性
- C++11中的一些新特性