总体概括
auto占位符—编译器根据初始值推断真实的数据类型。
通过auto的自动类型推断,可以大大简化我们的编程工作(主要是为了少些代码)。
一个占位符,用于简化程序。
auto用于两种情况
- 声明变量时根据初始化表达式自动推断该变量的类型
- 生命函数时函数返回值的占位符
两个主要用途
- 使用auto定义迭代器
- auto用于泛型编程
原理
auto关键字是一个变量定义中的数据类型占位符,它占据了原来应该是具体数据类型的位置。
而在编译的时候,编译器会根据这个变量的初始值,推断出这个变量应有的具体数据类型,然后替换掉auto关键字,就成为一个普通的带有具体数据类型的变量定义了。
用auto关键字定义变量的形式跟一般的定义变量的形式并无二异,唯一的差别之处在于,用auto关键字定义变量时,变量必须有初始值,以让编译器推断出它的实际类型,并在编译时将 auto 占位符替换为真正的类型。
使用
对于基本的数据类型int char等不建议使用
在类型冗长复杂的时候使用,可以是程序清晰易读
使用 auto 定义迭代器
优点简化程序
std::vector
auto i = vs.begin
auto 用于泛型编程
auto 的另一个应用就是当我们不知道变量是什么类型,或者不希望指明具体类型的时候,比如泛型编程中。
template <typename T> //使用auto只需要一个模板参数
void func(void){
auto val = T::get();
cout << val << endl;
}
template <typename T1, typename T2> //不适用auto,额外增加一个模板参数 T2
void func(void){
T2 val = T1::get();
cout << val << endl;
}