编程时常常需要把表达式的值赋给变量,这就要求在声明变量的时候清楚地知道表达式的类型。
C++中。的auto关键字是一个类型说明符,通过变量的初始值或者表达式中参与运算的数据类型来推断变量的类型。C++11新标准引入了auto 类型说明符,让编译器去分析表达式的类型。和原来那些只对应一种特定类型的说明符(比如double)不同,auto让编译器通过初始值来推算变量的类型。显然,auto定义的变量必须有初始值(与C语言中的auto定义变量不一样)例如:
//由val1和val2相加的结果可以推断出item的类型
auto item = val1 + val2;//item初始化为val1和val2相加的结果
使用auto也能在一条语句中声明多个变量。因为一条语句声明时只能有一种基本数据类型,所以该语句中的所有变量初始基本数据类型必须一样,例如:
auto i = 0, *p = &i; //正确:i是整数、p是整形指针
auto sz = 0, pi = 3, 14; //错误:sz和pi的类型不一致
另外:在范围for语句中,经常会使用到auto关键字,常用的两种方式
for( auto a:b)与for( auto &a:b)的区别如下
#include<iostream>
using namespace std;
int main()
{
string s( "hello world" );
for (auto c:s)
c= 't' ;
cout<<s<<endl; //结果为hello world
for (auto &c:s)
c= 't' ;
cout<<s<<endl; //结果为ttttttttttt
}
for(auto a:b)中b为一个容器,效果是利用a遍历并获得b容器中的每一个值,但是a无法影响到b容器中的元素。
for(auto &a:b)中加了引用符号,可以对容器中的内容进行赋值,即可通过对a赋值来做到容器b的内容填充。
参考文章:https://blog.csdn.net/LiuBo_01/article/details/80752734
https://blog.csdn.net/weixin_40710375/article/details/80606062?
https://blog.csdn.net/qq_33651375/article/details/100132884?