C++11/17 语法新特性(踩坑第1篇)

C++11开始,可以用  {  }  来初始化类的对象。

auto uri = mongocxx::uri{ "mongodb://host1/?minPoolSize=3&maxPoolSize=5" };

 

 

//小括号初始化
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++11扩充了大括号初始化功能

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
}; 

 

posted @ 2020-04-26 09:50  He_LiangLiang  阅读(867)  评论(0编辑  收藏  举报