/*
练习2.38:说明由decltype指定类型和由auto指定类型有何区别。请举一个例子,decltype指定的类型和auto指定的类型一样。
再举一个例子,decltype指定的类型与auto指定的类型不一样。
区别:
1)auto是通过表达式的初始值来推算变量的类型,因此auto定义的变量必须有初始值;
decltype是分析表达式的类型,但是不实际计算表达式的值,decltype定义的变量不要求必须有初始值。
2)引用作为auto的初始值时,使用的是引用的对象;
引用作为decltype的参数时,使用的是引用类型。
{顶层const:指针本身是个常量}
3)auto默认忽略顶层const,想要推断出顶层const,需要明确指出:const auto var=ci;
decltype的参数,不会忽略顶层const。
两者指定的类型一样的例子:
int i,j;
auto k=i;
decltype(i) k;
两者指定的类型不一样的例子:
const int ci=1;
auto var1=ci;//var1是一个整型变量,顶层属性被忽略掉了
decltype(ci) var2=2;//var2是一个整型常量。
///////////////////
int i, &r=i;
auto var3=r;//var3是一个整型变量,值为i的拷贝;
decltype(r) var4=i;//var4是一个对整型变量的引用,绑定到了i上。
*/
C++Primer第五版第二章练习2.38
最新推荐文章于 2025-12-16 21:19:17 发布
本文比较decltype和auto在C++中的类型推断,强调auto依赖于初始值推断类型,而decltype仅分析表达式,不计算值。通过实例展示两者在处理常量引用和顶层const的区别。
33万+

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



