- auto 自动推断变量的类型,比如在模板编程时,声明的变量的类型我们并不知道。C++11引入了auto类型说明符,用它来让编译器替我们去分析表达式所属的类型。
auto可以在声明变量的时候根据变量初始值的类型自动为此变量选择匹配的类型
auto name = value; - auto的使用规则:
- 自动类型推断
发生在编译期
,所以使用auto并不会造成程序运行时效率的降低;auto 仅仅是一个占位符,在编译器期间它会被真正的类型所替代 - auto声明的变量必须要初始化,否则编译器不能判断变量的类型。这类似于const关键字
- auto不能被声明为返回值,auto不能作为形参,auto不能被修饰为模板参数
- 代替冗长复杂的变量声明。**如变量auto it代替map<int,int>::iterator类型
- 定义模板参数时,用于声明依赖模板参数的变量。
- 模板函数依赖于模板参数的返回值
- 自动类型推断
- 推导规则
- 声明为auto(不是auto&)的变量,忽视掉初始化表达式的顶层const。即对有const的普通类型(int、double等)忽视const,对常量指针(顶层const)变为普通指针,对指向常量(底层const)的常量指针(顶层cosnt)变为指向常量的指针(底层const)
- 声明为auto&的变量,保持初始化表达式的顶层const或volatile 属性
- 若希望auto推导的是顶层const,加上const,即const auto
- auto 的限制:
- auto 不能在函数的参数中使用。
- auto 不能作用于类的非静态成员变量(也就是没有 static 关键字修饰的成员变量)中。
- auto 关键字不能定义数组,比如:
- char url[] = “egwwagewa”;
- auto str[] = url; //arr 为数组,所以不能使用 auto
- auto 不能作用于模板参数
参考资料:https://github.com/Light-City/CPlusPlusThings