什么是 auto 关键字?
在 C++11 中,auto 关键字被引入作为一种类型推断的机制(在编译期间执行),它允许编译器自动推断变量的类型。
auto 使用时需要注意的问题:
1、auto 与指针和引用结合使用:
首先说一下 auto 和 auto* 为什么一样,因为在 auto a = &x; 这里 auto 类型推断为 int*,而 auto* b这里的 auto 类型推断就是 int,所以二者效果相同。
对于引用必须加 & ,结合下面这个例子说明一下:修改 c 的时候,x 的值是不会变的,所以类型推断不会是引用,只有加上 & 才是引用,修改 d 的值 x 的值也会变。
2、auto 同一行定义多个变量
同一行定义多个变量,必须是同一个类型,因为编译器只会推导第一个的类型,再根据类型定义推出其他的,如果一行定义了多个类型,编译器就会报错。
3、auto 不能作为函数参数
参数类型是在编译前确定的,auto 是在编译期间执行的。
4、auto 不能直接声明数组
数组名会退回为数组的首地址,这里就和上面的 auto* 类似,所以 auto 不会推断为数组类型,而是 int*,所以不能直接声明数组
重点:auto 特别有用的 4 种情况
1、迭代器:使用 STL 容器时(std::vector,std::map 等)时,迭代器的类型可能会非常复杂。使用 auto 可以简化代码并提高可读性
2、增强 for 循环:在增强 for 循环中,auto 可以自动推断元素的类型,使代码更简洁
3、函数返回类型推断:在 C++14 中,auto 还可以用于推断函数的返回类型
4、泛型编程:在泛型编程中,当类型参数非常复杂或者难以显示指定时,auto 可以简化代码。
总结
auto 关键字在 C++11 中的引入极大地提高了代码的可读性和编写的便捷性,特别是在处理复杂类型、泛型编程以及 STL 容器和算法时,auto 的使用可以显著简化代码