auto自动类型推导
使用auto声明的变量类型,编译器在编译阶段自动推导变量类型
int a = 0;
auto i = a, &j = a, *p = &a
auto除了可以推导出基础变量类型,可以推导出指针和引用,但使用auto声明的变量必须马上初始化,因为编译器要在编译阶段就推出auto的类型并进行覆盖替换。
auto的使用还有如下需要注意的地方:
//auto b = 1, c = 1.2; 错误,类型不同,编译器编译时出现二义性,无法推导
//auto e; 错误,必须马上初始化
//int func(auto val); 错误,auto不能用于函数参数
auto的限制:
1、auto的使用必须马上初始化,否则无法推导出类型
2、auto在一行定义多个变量时,各个变量的推导不能产生二义性,否则编译失败
3、auto不能用作函数参数
4、在类中auto不能用作非静态成员变量
5、auto不能定义数组,可以定义指针
6、auto无法推导出模板参数
auto在基于范围的for循环中的使用:
for (auto i : vec) {
cout << i << "\t";
}
auto用于推导容器的迭代器类型:
vector vec(1,2,3);
vector<int>::iterator it = vec.begin();
//使用auto推导可以减少代码的冗余
auto it_auto = vec.begin();