1、定义变量时,必须初始化 auto a = 10; //正确 auto b; //错误 2、不能用于函数参数 void func(auto a = 1); //错误 3、auto变量不能作为自定义类型的成员变量 struct Foo { auto var1_ = 0; //error:auto不能用于非静态成员变量 static const auto var2_ = 0; }; 4、无法定义数组 int arr[10] = {0}; auto aa = arr; //OK: aa -> int * auto rr[10] = arr; //错误,auto无法定义数组 5、模板实例化类型不能是auto类型 vector<auto> a = { 1 }; //错误,有初始化也不行 6、无法推导出模板参数 struct Bar {}; Bar<int> bar; Bar<auto> bb = bar; //错误:auto无法推导出模板参数 7、auto用于占位符,真正的返回值在后面定义; template<class Lhs, class Rhs> auto adding_func(const Lhs &lhs, const Rhs &rhs) -> decltype(lhs + rhs) { return lhs + rhs; } cout << adding_func<double, int>(10, 2) << endl; 8、支持区间迭代 for (auto &x : my_array) { x *= 2; }