auto与decltype
1.auto
①auto是通过初始值的数据类型来推导对象的类型。如:auto pi = 3.14159, rad = 1.0;这条语句中pi、rad都为double类型的值,故此处auto推导为double。**但是,如果初始值是一个const类型,auto会忽略const属性,故对const类型推导仍需加上const。**如:const auto rad = pi;
②如果希望auto定义一个类型的引用,需要显式指出引用类型。如:int i = 0, &ri = i; auto r = ri; //r是int类型而不是int类型引用,auto被推导为int auto &r = i; //r是int类型引用
③auto推导指针类型:若表达式的值为一个地址,则auto自动推导出指针类型。如:int i = 0; const int ci = 10;auto p = &i;//auto被推导为int * 类型 auto pc = &ci;//pc被推导为const int * 类型,ci的const属性被保留,因为const int *为常量指针,不可改变对象的值,所以此处const的属性被保留需要注意的是,*和&从属于对象名,auto只是个占位符,只推导出指针类型,如:auto &ref = i,*ptr = &i; //auto被推导为int auto &ref2 = i, ptr = &i; //错误:auto的推导类型不一致
④使用auto时要注意,如果同一条语句定义多个对象时,它们的类型必须一致。
2.decltype
①decltype是根据表达式的类型来定义对象。其语法格式为decltype(expr)。如:int i = 0; decltype (i) j = 1; //j为int类型 decltype(i + j)k = 0; //k为int类型也就是说,decltype只是对i+j的值的数据类型进行分析,但不会计算i+j的值。且decltype遇到const 类型的时候,不会忽略const的属性。且decltype是根据括号类的表达式来推导。
②decltype和引用:若括号中表达式为引用,则也会推导出引用类型,如:int i = 0,&r1 = i; decltype (r1) r2 = i; //r2为int引用 decltype(r1+0)r3;//r3为int类型,且像这条语句,如果想通过一个引用来推导出整型,可以通过表达式后加0处理如果把对象加上圆括号,那么decltype会推导出引用类型,如:int i= 0;decltype ((i))r2 = i //此处的r2就是对i的引用
③decltype与指针:int i =0, *ptr = &i; decltype (ptr) ptr2;//ptr2为int * decltype (*ptr)refi = i; //ref i 为 int &,必须初始化 decltype (*ptr+0)j //j为int类型
auto与decltype笔记整理
最新推荐文章于 2025-12-04 22:55:08 发布
本文解析了auto关键字如何通过初始值推导变量类型,包括对const处理和指针的推导规则,同时介绍了decltype的功能,它根据表达式确定类型并保持const属性。
1907

被折叠的 条评论
为什么被折叠?



