auto关键字
auto关键字在C语言中几乎很少用到,它是声明一个变量是局部变量。常常被省略。
但是在C++11中 auto 关键字是自动识别类型
double a=1.67;
auto b=a; auto自动推导 b是 double类型的
我们可以打印b的类型来观察
cout<<typeid(b).name()<<endl;
auto识别在这里意义不大,但是在C++以后学习map的时候可以用auto来自动识别一个长的类型名字
注意auto关键字自动去除const,
比如 const char ch='A';
auto b= ch; 则这个auto实际上是 char 而不是const char
auto 的两不能:
auto不能作为函数的参数,因为auto必须初始化。
auto 不能作为数组的类型,编译器不能识别数组里面的元素的类型。auto[10]是错误的
一个语法糖:auto 范围for循环
平常我们遍历数组写的比较麻烦。用auto之后会比较简单。
int arr[10]={1,2,3,4,5,6,7,8,9,10};
for(auto e : arr)
{
cout<<e<<endl;
}
把arr 所有元素依次赋值给e然后再打印
其实也可以这样写
for(int e :arr)
{
cout<<e<<endl;
}
但是用auto写更爽,让它自动识别
其实这个e是数组的拷贝 ,如果传引用呢?
传引用就实际上每次调用一次循环e就是 每一个arr
可以修改数组。但是e的声明周期还是这个循环,循环结束就被销毁了。
而如果不使用&就不会修改数组里面的内容 而是修改的拷贝的
e。这实际上就是传引用的一个作用:修改形参来影响实参(输出型参数)
这样写为什么不行?
因为传参的时候数组名是一个地址 而如果要用范围for就要传入整个数组,再一个个给e
C++中空指针常常写为nullptr 而不是写成NULL
NULL是一种宏定义 实际上编译的时候转换为0 ,nullptr才是纯正的空指针,类型是type*
也就是NULL默认被识别为0 如果需要让它变为指针需要对它进行强制类型转换,这个题目中转换为(int *)