一、auto关键字
1、前言
C++中引入这个关键字,是为了解决一些比较长的类型名称会被使用者记错或者忘记的方法,好比如一些比较长的类型,例如C++中的一个容器“Map”的迭代器,因为Map这个容器是有键值对的,而且还是一个模板类,那么它在显式实例化且不展开std命名空间的时候类型名称不可避免的会很长,如下:
#include<iostream>
#include<map>
using namespace std;
int main
{
std::map<std::string,std::string> map1;
std::map<std::string,std::string>::iterator it=map1.begin();
return 0;
}
那如果使用auto,这个关键字的化,我们的书写就会显的更简短与精致:
#include<iostream>
#include<map>
using namespace std;
int main
{
std::map<std::string,std::string> map1;
auto::iterator it=map1.begin();
return 0;
}
2、auto的概念及用法
auto它是就可以自动推演变量的类型的,但是在这之前有一个大前提,那就是必须要有一个初始化的变量,因为auto是通过初始化的变量推导类型的,
用法:
auto 变量名称 +初始化
auto a=10;//这里就会自动推导int
auto b=1.1;//这里就会自动推导浮点型
auto c='abc'//这里就会自动推导char型
3、auto需要注意的地方
1、必须初始化
2、auto在推导指针变量的时候
auto 变量名 和 auto 变量名 的结果是一样的*
3、在auto推导应用的时候则不可以省略掉&
4、如果需要在同一行同时auto多个变量,那就需要同一这一行上的所有变量的类型,不可以出现不同的类型
4、auto禁止使用的场景
1、auto不可以作为函数的参数自动推导
2、auto不可以用在声明数组
二、范围for
1、范围for和普通for的区别
当有一个数组或者链表等一些结构需要遍历的时候,经常会用到for循环,在C语言中的for循环,有很多的注意实现,比如说循环的结束点,循环的条件,循环的开始位置等等,当C++导入了范围for之后就不再需要控制前面所述的条件了,它会自动的实现,好比如遍历一个数组:
这样相比之前的普通的for写起来就会轻松很多!
**语法:**for(auto 迭代对象 :迭代的范围)
2、范围for需要注意的事项
1、范围for必须有一个规定的范围,就好比如上述的遍历数组,数组起始空间就是[0,n-1]
2、范围也是可以用continue和break控制循环的
3、迭代的对象的迭代器需要操作符重载实现++和==(对于自定义类型而言),范围for的底层实际就是迭代器