当前位置:主页 > 软件编程 > C代码 >

C++ 11新特性之大括号初始化详解

时间:2021-10-01 13:04:30 | 栏目:C代码 | 点击:

本文主要给大家介绍了关于C++11新特性之大括号初始化的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:

C++11之前,C++主要有以下几种初始化方式:

//小括号初始化
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 新特性

您可能感兴趣的文章:

相关文章