auto和decltype区别与常见用法
- auto可以根据初始值的类型自动推导出需要的数据类型(需要为对象提供初始值),当初始值是const对象,auto忽略const属性 如const pi;auto rad=pi;rad忽略pi的const属性
- auto引用时需要显示指出引用类型,auto不会自动推导出引用,因此在范围for语句中需要执行写操作时,需要加入引用符号,如auto&i:arr,此外,auto会忽略一般对象的const属性,但对于引用,其const属性会保留下来。
- 如果表达式的值是地址值,则auto可以自动推导出指针类型.
- 范围for语句中用来遍历数组、容器、字符串中的元素时,通常用auto来推导数据元素的类型
- 利用auto对数组名进行类型推导时,得到的是一个指针而不是数组
6.利用auto简化二维数组书写:int arr[3][5]; for(auto p:arr) for(auto q:*p)
decltype
1.它能够在不用计算表达式的情况下获取表达式的数据类型,
当decltype遇到const时,和auto不一样,它不会忽略const属性
2.decltype不会忽略引用类型
3.利用decltype进行类型推导时,需要注意:
int i=0,*ptr=&i;
decltype(ptr)ptr2;
decltype(ptr)ref=i;//因为表达式ptr是个解引用操作可以对ptr指向的对象进行写操作,因此decltype推导出来的是引用类型
decltype(ptr+0)j;//如果想推导出int 类型可以对表达式ptr+0进行类型推导
3.当基于数组arr利用decltype定义一个新的数组时,数组名arr不会转换成指针。如decltype(arr)ar2;
以下为例题