auto类型推导规则如下: 1. 初始化语句中存在单一类型:如果初始化语句中存在一个明确的类型,那么auto会将变量的类型推导为该类型。例如: auto x = 10; // x推导为int类型 auto pi = 3.14; // pi推导为double类型 2. 初始化语句中存在多个表达式,则auto推导为“最宽泛”的类型:当初始化语句中有多个表达式,...
autox1 =27;// type is int, value is 27autox2(27);// type is int, value is 27autox3 = {27};// type is std::initializer_list<int>, value is { 27 }autox4{27};// type is std::initializer_list<int>, value is { 27 } 特殊点在于:如果使用uniform initialization来进行auto类型推断...
具体规则如下: 如果右侧是一个变量,则auto会推导为该变量的类型。 int a = 10; auto b = a; // b的类型会被推导为int 复制代码 如果右侧是一个常量表达式,则auto会推导为该常量表达式的类型。 auto c = 10; // c的类型会被推导为int 复制代码 如果右侧是一个表达式,则auto会根据表达式的类型进行推导。
规则1: auto声明的变量是按值初初始化。 如果没有显示的使用引用,也没有指针。那么编译器在推导的时候会忽略const和volatile限定符。 constinta=10;autob=a;// b 为 int, 而不是constauto&c=a;// c 为 const int&constautoe=a;//auto 推导的类型为int, e的类型为 const int(auto) ...
auto: 当auto后面显式添加&时,才会保留表达式cv限定符和引用。 当auto推导结果为指针时,保留cv操作符。 其它情况不保留cv限定符和引用。 intmain(){intx =0;constauto* a = &x;// a -> const int *autob = &x;// b -> int *auto&c = x;// c -> int &autod = c;// d -> intconst...
上篇文章讲了模板参数的推导规则,其实 auto 的推导规则跟模板参数的推导基本上一样的,都是推导参数嘛。比如上篇文章的模板基本结构是: template<typenameT>voidf(ParamTypeparam);...f(expr); 编译器使用 expr 来推断ParamType和T。 那么对应在 auto 推导中,auto 就对应了T,变量的type specifier就是ParamType...
当auto推导结果为指针时,保留cv操作符。 其它情况不保留cv限定符和引用。 intmain(){intx =0;constauto* a = &x;// a -> const int *autob = &x;// b -> int *auto&c = x;// c -> int &autod = c;// d -> intconstautoe = x;// e -> const intautof = e;// f -> int...