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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM