简介
auto声明的变量必须由编译器在编译器在编译时期推导而得。
注意:使用auto定义变量时,必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推导变量的实际类型。
因此auto并非是一种“类型”的声明,而是一个类型声明时的“占位符”,编译器在编译期会将auto替换为变量的实际类型。
C++11 赋予 auto 关键字新的含义,使用它来做自动类型推导
1.简单赋值用法以及和const配合使用
// 普通赋值用法
auto n = 27; // auto 表示 int
auto m = 27.7; // auto 表示 double
auto i = &n; // auto 表示 int*
auto url = "https://blog.csdn.net/dangwei_90"; // auto 表示 const char*
// 配合const使用用法
int n = 27;
const auto m = n; // m 为 const int ,auto 表示 int
auto f = m; // m 为 const int ,auto 表示 int(const 属性被抛弃)
const auto &i = n; // i 为 const int& 类型,auto 表示 int
auto &j = i; // i 为 const int& 类型,auto 表示 const int(引用,保留const)
当类型不为引用时,auto 的推导结果将不保留表达式的 const 属性;
当类型为引用时,auto 的推导结果将保留表达式的 const 属性。
2.常见应用
最常见的应用在迭代器
#include <vector>
using namespace std;
int main(){
vector< vector<int> > vec;
// vector< vector<int> >::iterator i = vec.begin();
auto i = vec.begin(); //使用 auto 代替具体的类型
return 0;
}
还常见用于auto 泛型编程,以及for循环等。
3.使用限制
1) auto 不能在函数的参数中使用
2) auto 不能作用于类的非静态成员变量(也就是没有 static 关键字修饰的成员变量)中
3) auto 关键字不能定义数组
4) auto 不能作用于模板参数
详细参考:C++ auto类型推导完全攻略