您好,欢迎来到纷纭教育。
搜索
您的当前位置:首页【C++初阶】auto关键字

【C++初阶】auto关键字

来源:纷纭教育

 

1.auto简介

在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的 是一直没有人去使用它,大家可思考下为什么? C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一 个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。

补充:typid(),用于打印变量的类型

编写如下代码:

所以结论:auto关键字可以自动推导类型。 

引入auto的原因:

随着程序越来越复杂,程序中用到的类型也越来越复杂,经常体现在:

1.类型难于拼写

2.含义不明确容易出错。

如果没有auto,我们通过一个复杂的类型来定义变量:

vector<string> v;
vector<string>::iterator it = v.begin();

如果使用auto关键字:

vector<string> v;
//vector<string>::iterator it = v.begin();
auto it = v.begin();

为什么不使用typedef来实现类型重定义:

首先使用typedef确实可以给类型取别名,也可以简化代码。如下:

不使用typedef

std::map<std::string, std::string> m{ { "apple", "苹果" }, { "orange","橙子" },{"pear","梨"} };

使用后:

typedef std::map<std::string, std::string> Map;
Map m{ { "apple", "苹果" },{ "orange", "橙子" }, {"pear","梨"} };

但是问题在于:编程时往往需要将表达式的值赋值给变量,要求在声明变量时清楚的知道表达质的类型。

2.auto的使用 

①使用auto定义变量时必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推导auto的实际类型。因此auto并非是一种类型的声明,而是一个类型声明时的占位符,编译器在编译期间会将auto替换为变量实际的类型。

②auto不可以作为函数的参数。

③auto不能做函数返回值

我们调用一个函数,主要关注的就是函数的返回值和参数,如果返回值的类型不确定,那么我们调用这个函数的结果也是不确定的。

④使用auto声明指针类型的时候,用auto和auto*没有任何区别

⑤使用auto声明引用类型时必须加上&

⑦auto不能用于声明数组,这是一个规定 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- fenyunshixun.cn 版权所有 湘ICP备2023022495号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务