随着程序越来越复杂,程序中用到的类型也越来越复杂,经常体现在:
1. 类型难于拼写
2. 含义不明确导致容易出错
std::map::iterator 是一个类型,但是该类型太长了,特别容易写错。
如果使用typedef呢?
根据上图发现typedef确实可以简化代码,但是typedef会有别的问题
使用了typedef之后,遇到这种情况容易被误导。而在编译的时候往往需要把表达式的值清楚的赋值给变量,所以更应该清楚的知道表达式的类型。
(关于为什么typedef会有这样问题,这边本人有看到一篇讲的比较详细的博客,有兴趣的同志们,可以再去了解一下。https://blog.csdn.net/m0_74376760/article/details/127986087?spm=1001.2014.3001.5502)
auto简介
C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一 个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。
(typeid这个可以查看变量类型)
使用auto定义变量时必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推到auto的实际类型。
auto的使用细则
1.auto与指针、引用结合使用
用auto声明指针类型时,用auto和auto*没有任何区别,但用auto声明引用类型时则必须加&。
2.在同一行定义多个变量
当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译器实际只对第一个类型进行
auto不能推导的场景
1.auto不能作为函数的参数
(因为函数参数需要在编译时就确定,而auto定义的变量类型是在编译运行时确定的)
2.auto不能直接用来声明数组
(auto关键字在推导类型时,只能根据单个初始化表达式的类型来推导。对于数组,编译器需要知道数组的元素类型和数组的大小。auto关键字无法同时推导这两个信息。)
auto在实际中常见的优势用法就是和范围for循环,以及lambda表达式配合使用。