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 用来指明某个函数无法或者不打算抛出异常。