总体概括

auto占位符—编译器根据初始值推断真实的数据类型。
通过auto的自动类型推断,可以大大简化我们的编程工作(主要是为了少些代码)。

一个占位符,用于简化程序。

auto用于两种情况

  1. 声明变量时根据初始化表达式自动推断该变量的类型
  2. 生命函数时函数返回值的占位符

两个主要用途

  1. 使用auto定义迭代器
  2. auto用于泛型编程

原理

auto关键字是一个变量定义中的数据类型占位符,它占据了原来应该是具体数据类型的位置。
而在编译的时候,编译器会根据这个变量的初始值,推断出这个变量应有的具体数据类型,然后替换掉auto关键字,就成为一个普通的带有具体数据类型的变量定义了。
用auto关键字定义变量的形式跟一般的定义变量的形式并无二异,唯一的差别之处在于,用auto关键字定义变量时,变量必须有初始值,以让编译器推断出它的实际类型,并在编译时将 auto 占位符替换为真正的类型。

使用

对于基本的数据类型int char等不建议使用
在类型冗长复杂的时候使用,可以是程序清晰易读

使用 auto 定义迭代器

优点简化程序
std::vector::iterator i=vs.begin();
auto i = vs.begin

auto 用于泛型编程

auto 的另一个应用就是当我们不知道变量是什么类型,或者不希望指明具体类型的时候,比如泛型编程中。

  1. template <typename T> //使用auto只需要一个模板参数
  2. void func(void){
  3. auto val = T::get();
  4. cout << val << endl;
  5. }
  6. template <typename T1, typename T2> //不适用auto,额外增加一个模板参数 T2
  7. void func(void){
  8. T2 val = T1::get();
  9. cout << val << endl;
  10. }