Auto (C++)

auto是C++程序设计语言的关键字。自C++11以来，auto关键字用于两种情况：声明变量时根据初始化表达式自动推断该变量的类型、声明函数时函数返回值的占位符。C++98标准中auto关键字用于自动变量的声明，但由于使用极少且多余，在C++11中已删除这一用法。

简要理解

auto可以在声明变量时根据变量初始值的类型自动为此变量选择匹配的类型。C++语言类似的关键字还有decltype。
举例：对于值x=1；即可以声明：int x = 1或long x = 1，也可以直接声明auto x = 1。
其它语言的类似功能包括C#的var关键字。

用法

根据初始化表达式自动推断被声明的变量的类型，如：
 auto f=3.14;      //double
 auto s("hello");  //const char*
 auto z = new auto(9); // int*
 auto x1 = 5, x2 = 5.0, x3='r';//错误，必须是初始化为同一类型
但是，这么简单的变量声明类型，不建议用auto关键字，而是应更清晰地直接写出其类型。
auto关键字更适用于类型冗长复杂、变量使用范围专一时，使程序更清晰易读：
 std::vector<int> vect; 
 for(auto it = vect.begin(); it != vect.end(); ++it)
 {  //it的类型是std::vector<int>::iterator
    std::cin >> *it;
  }
或者保存lambda表达式类型的变量声明：
  auto ptr = [](double x){return x*x;};//类型为std::function<double(double)>函数对象
在模板函数定义时，如果变量的类型依赖于模板参数，使用auto关键字使得在编译期确定这些类型，如：
 template <class T, class U>void Multiply(T t, U u)
 {
      auto v = t * u;
      std::cout<<v;
 }
模板函数的返回类型如果也是依赖于从模板参数推导，
 template <typename _Tx, typename _Ty>
 auto multiply(_Tx v1, _Ty v2) -> decltype( _Tx * _Ty )
 {
     return v1*v2;
 }
 auto result = multiply(101, 1.414); // 结果类型是double