C++11新特性(1)
-
以auto完成类型自动推导
auto i=42; //以auto声明的变量,其类型会根据其初值被自动推倒出来,因此一定需要一个初始化操作;
static auto a=0.19;//可以用额外限定符修饰
vector<string> v; auto pos=v.begin();//如果类型很长或类型表达式复杂 auto很有用;
auto l=[] (int x)->bool{...};//如果类型很长或类型表达式复杂 auto很有用;
-
一致性初始化
面对任何初始化动作,可以使用相同的动作,也就是使用“{}”。以下皆成立:
int values[] {1,2,3};
std::vector<int> v{2,3,5,7,11,13,17};
std::vector<std::string> cities{"xi'an","shanghai","beijing"};
std::complex<double>c{4.0,3.0};
-
初值列
初值列会强迫造成所谓value initialization,意思是即使某个local变量属于某种基础类型(那通常会有不明确的初值)也会被初始化为0(或nullptr--如果它是个pointer的话):
int i;//i has undefined value
int j{};//j is initialized by 0
int *p;//p has undefined value
int* q{};//q is initialized by
-
initializer_list
-
崭新的for循环用法:Range-Based for循环
C++11的for循环支持逐一迭代某个给定的区间、数组、集合内的每一个元素。
for(decl:coll){
statement
}
其中decl是给定集合中的每个元素的声明,coll是给定的集合,针对这些元素,statemet会被执行。
eg1:打印输出一组数
for(int i:{2,3,5,7,9.13,17,19}){
std::cout<<i<<std::endl;
}
eg2:将vector vec的每个元素elem乘以3
std::vector<double> vec;
...
for(auto& elem:vec){
elem *=3;
}
-
Move