C++11新特性之auto与decltype(总结)
通过前面两篇博客的学习,相信大家对auto与decltype有了基本的认识。没有学习过的读者可以参考——C++11新特性之auto-CSDN博客与C++11新特性之decltype-CSDN博客。本节主要对它们进行一个总结,帮助读者更好地了解与使用它们。
1.语法区别
auto的使用语法:
auto name = value;
根据value值的类型,推导name的类型。
decltype的使用语法:
decltype(exp) name = value;
name为变量名,value为变量值,exp是个表达式。根据exp表达式推导变量类型。
auto要求变量必须初始化,decltype则不需要。
2.限定符处理(主要是const)
auto对限定符的推导规则为:
(1)变量值的类型不是指针或引用,auto直接抛弃限定符,推导为没有限定符的类型。
(2)变量值的类型是指针或引用,auto则保留限定符。
decltype无论哪种情况都保留限定符。
3.引用处理
decltype会保留引用类型。
auto会抛弃引用类型,推导出原始的类型。
4.总结
auto使用简单,但推导复杂,有些情况会改变变量的类型,并且在一些场景下无法使用。
decltype使用相对复杂,但会保留表达式的任何类型。
大家可以根据实际情况进行合适的选择。