auto 类型推导的语法和规则
C++11 赋予 auto 关键字新的含义,使用它来做自动类型推导。也就是说,使用了 auto 关键字以后,编译器会在编译期间自动推导出变量的类型,这样我们就不用手动指明变量的数据类型了。
auto 关键字基本的使用语法如下:
auto name = value;
name 是变量的名字,value 是变量的初始值。
auto 类型推导的简单例子:
auto n = 10;
auto f = 12.8;
auto p = &n;
下面我们来解释一下:
第 1 行中,10 是一个整数,默认是 int 类型,所以推导出变量 n 的类型是 int。
第 2 行中,12.8 是一个小数,默认是 double 类型,所以推导出变量 f 的类型是 double。
第 3 行中,&n 的结果是一个 int* 类型的指针,所以推导出变量 p 的类型是 int*。
我们也可以连续定义多个变量:
int n = 20;
auto *p = &n, m = 99;
先看前面的第一个子表达式,&n 的类型是 int*,编译器会根据 auto *p 推导出 auto 为 int。后面的 m 变量自然也为 int 类型,所以把 99 赋值给它也是正确的。
auto 的限制
前面介绍推导规则的时候我们说过,使用 auto 的时候必须对变量进行初始化,这是 auto 的限制之一。那么,除此以外,auto 还有哪些其它的限制呢?
- auto 不能在函数的参数中使用。
- auto 不能作用于类的非静态成员变量中。
- auto 关键字不能定义数组
- auto 不能作用于模板参数
- 使用 auto 的时候必须对变量进行初始化
auto 的应用
使用 auto 定义迭代器
auto 的一个典型应用场景是用来定义 stl 的迭代器。
#include <vector>
using namespace std;
int main(){
vector< vector<int> > v;
vector< vector<int> >::iterator i = v.begin();
return 0;
}
修改上面的代码,使之变得更加简洁:
#include <vector>
using namespace std;
int main(){
vector< vector<int> > v;
auto i = v.begin(); //使用 auto 代替具体的类型
return 0;
}
本文介绍了C++11中的auto关键字用于自动类型推导的语法和规则,包括基本使用方法、限制条件及常见应用场景,如定义迭代器。
2607

被折叠的 条评论
为什么被折叠?



