目录
一、auto简介
二、auto的使用场景
三、注意事项
四、源代码
一、auto简介
在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型 指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。注意: 使用auto定义变量时必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推导auto的实际类 型。因此auto并非是一种“类型”的声明,而是一个类型声明时的“占位符”,编译器在编译期会将auto替换为 变量实际的类型。
二、auto的使用场景
1.使用auto自动识别变量类型
eg. auto自动识别变量类型eg. 当变量类型比较长时,auto自动识别变量类型,使代码变得简洁。
2.auto关键字经常和范围for一起使用,用来遍历数组。
注意,这里是将数组中的元素赋值给i,所以i的改变并不会影响原数组。
3.auto结合引用和范围for一起使用,用来修改数组。
三、注意事项
1.使用auto声明变量必须初始化。
2.不能使用auto和指针结合来修改数组。
auto* a 加一个 * 是在强调变量 a 是指针,故a只能接受指针类型,并不是将变量类型改为指针类型,没有指针auto类型。
eg. auto* 只能接收指针类型。
eg. auto* aa 并没有使 变量aa的类型变为int **。
可使用操作符typeid(a).name()来查看变量a的数据类型。(注意typeid不是函数)
3.同理,auto& b 是在强调b是引用,但引用可以除了可以接收引用,还可以接收其它类型,故b除了可以接收引用外还可以接收其它类型(int, double……),说明b是该类型变量的引用。
4.同句中的auto的类型必须相同。
5.auto不能作为参数。
6.范围for的范围必须是确定的。
注意:以下代码有问题,因为范围for的范围不确定。
四、源代码
#include<iostream>
using std::cout;
using std::endl;int main()
{//auto a = 1;//auto b = 3.14;//auto c = "a";//auto d = 'a';1.auto自动识别类型//cout << typeid(a).name() << endl; //typeid()识别变量类型//cout << typeid(b).name() << endl;//cout << typeid(c).name() << endl;//cout << typeid(d).name() << endl;2.auto关键字经常和范围for一起使用,用来遍历数组。普通的遍历数组//int arr[] = { 0,1,2,3,4,5,6 };//for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); ++i)// cout << arr[i] << " ";//cout << endl;范围for:自动迭代,自动结束依次取arr中的元素,赋值给变量i(注意i是arr中元素的拷贝)//for (auto i : arr)// cout << i << ' ';//cout << endl;//注意: auto* a 是在强调a是指针类型,强调a只能接收指针类型。/*int i = 0;int* ip = &i;auto a = i;///auto* aa = i; //auto* 只能接收指针类型auto* aa = ip;auto b = ip;cout << typeid(aa).name() << endl;cout << typeid(b).name() << endl;*///3.auto结合引用和范围for一起使用,用来修改数组。int arr[] = { 1, 2, 3, 4, 5, 6 };for (auto a1 : arr){cout << a1 << ' ';}cout << endl;for (auto& i : arr){++i;}for (auto a2 : arr){cout << a2 << ' ';}cout << endl;//注意:使用auto声明变量必须初始化//auto a;return 0;
}//6.范围for的范围必须是确定的。
//void test(int a[])
//{
// for (auto i : a)
// {
// cout << i << endl;
// }
//}