1.类型推到
C++引入了auto和decltype关键字实现类型推导,通过这两个关键字不仅能方便获取复杂的类型,而且还能简化书写,提高编码效率
C11中auto成为类型指示符
auto类型推导:auto定义的变量,可以根据初始化的值,在编译时推导出变量名的类型。
如:
2. auto的推导规则
从上面的示例中可以看到auto的一些使用方法。它可以同指针、引用结合起来使用,还可以带上cv限定符((修饰词),const和volatil限定符的统称)。
由上面的例子可以看出:
ip和c的推导结果是很显然的,auto在编译时被替换为int,因此,a和c被推导为int*和int&;
xp的推导结果说明,其实auto不申明为指针,也可以推导出指针类型;
d的推导结果说明,当表达式是一个引用类型时,auto会把引用类型抛弃,直接推导为int;
f的结果可以说明:当表达式带有const(实际上Volatile也会得到同样的结果)属性时,auto会把const属性抛弃掉,推导成non-const int 类型;
g,h的推导说明:当auto和引用(换成指针在这里也将得到同样的结果)结合时,auto的推导将保留表达式的const属性。
通过上面的一系列示例,可以得到下面这两条规则:
(1)当不申明为指针或者引用时,auto的推导结果和初始化表达式抛弃引用和cv限定符后类型一致;
(2)当声明为指针或引用时,auto的推导结果将保持初始化表达式的cv属性。
3. auto作为函数的形参类型
4. auto的限制:
总结:
1.C11中auto成为类型指示符;
2. auto不能用于函数参数;
3. auto不能用于非静态成员变量;
4. auto无法定义数组;
5. 实例化模板时,不能使用auto作为模板参数。
示例: