您的位置:首页 > 汽车 > 新车 > 【C++初阶】auto关键字

【C++初阶】auto关键字

2024/11/15 15:13:29 来源:https://blog.csdn.net/m0_71503225/article/details/139232928  浏览:    关键词:【C++初阶】auto关键字

 

目录

1.auto简介

2.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*没有任何区别

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

 ⑥使用auto在同行声明多个变量的时候,这些变量必须是相同的类型,否则编译器会报错,因为编译器实际只会对同一个类型进行推导,然后使用推导出来的类型定义其他变量。

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com