C++11語言新特性
1.Template 表達式內的空格
vector<list<int> > //OK in each C++ version
vector<list<int>> //Ok since C++11
2.C++11 允許你使用nullptr 取代0或者null,用來表示一個pointer(指針)指向所謂的no value.
void f(int);
void f(void*);
f(0); //call f(int)
f(NULL); //call f(int) if NULL is 0,ambiguous otherwise
f(nullptr) //call f(void*)
nullptr 是一個新關鍵字,它被自動轉換爲各種pointer類型,但不會被轉換爲任何
整型類型,它擁有類型std::nullptr,定義於<cstddef>
3.auto 自動類型推導
vector<int> vecRoadId;
auto iter = vecRoadId.begin();
//等價於 vector<int>::iterator iter = vecRoadId.begin()
4.一致性初始化(Uniform Initialization)與初值列(InitializerList)
C++11引入了“一致性初始化”概念,意思是面對任何初始化動作,
你可以使用相同語法,也就是使用大括號。
int values[] {1,2,3};
std::vector<int> v {1,2,3,4,5};
int i; //j has undefined value ;
int i{}; //j is initialized by 0;
int* p; //p has undefined value ;
int* p{}; //p is initialized by nullptr;
int x1(5.3); //OK
int x2 = 5.3; //OK
int x3{5.0}; //ERROR
int x4 = {5.3} //ERROR
char c1{7}; //OK
char c2{99999} //ERROR
5.Range-Based for 循環
for(decl : coll)
{
statement
}
for(int i : {1,2,3,4,5,6})
{
std::cout<<i<<std::endl;
}
std::vector<vector> vec;
for(auto& elem:vec)
{
elem *= 3;
}
6 關鍵字 noexcept 用來指明某個函數無法或者不打算拋出異常。