C++的auto究竟是何方神圣
- 前言🙌
- auto(C++ 11) 的使用细则
- auto是什么?
- auto声明的变量是在什么时期被编译器推导出来呢?
- 为什么使用auto进行定义变量时,必须进行初始化?
- auto 的使用场景
- auto与指针和引用结合使用的场景
- 在一行中定义多个变量。
- auto不能推导类型的场景有哪些?
- 总结撒花💞
😎博客昵称:博客小梦
😊最喜欢的座右铭:全神贯注的上吧!!!
😊作者简介:一名热爱C/C++,算法等技术、喜爱运动、热爱K歌、敢于追梦的小博主!
😘博主小留言:哈喽!😄各位CSDN的uu们,我是你的博客好友小梦,希望我的文章可以给您带来一定的帮助,话不多说,文章推上!欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!😘
前言🙌
哈喽各位友友们😊,我今天又学到了很多有趣的知识,现在迫不及待的想和大家分享一下! 都是精华内容,可不要错过哟!!!😍😍😍
auto(C++ 11) 的使用细则
auto是什么?
auto最早产生的,其实是在C++98,后面C++对auto进行了全新的定义。本篇文章讨论的是C++ 11的auto。auto,主要是用来自动推导类型的一个关键字。随着程序越来越复杂,程序中用到的类型的也越来越复杂。主要体现在:
- 类型太长;
- 含义不明确容易出错。
有人可能会说,可以用typedef来给类型定义,但是我们有这样的现实需求:在编程时,我们常常要把表达式的值赋值给变量。这就要求在声明变量的时候,必须知道表达式值的类型。因此,单单靠typedef是无法满足的。而C++11的auto就可以根据表达式的值自动推导出类型。仅仅使用auto就能够代替一长串的类型名,简化了代码,也不容易出错。
auto声明的变量是在什么时期被编译器推导出来呢?
在C++11中,auto不再是C++98中做一个存储类型指示符,而是作为一个新的类型指示符来指示编译器。auto声明的变量是在编译期由编译器推导出来的。
为什么使用auto进行定义变量时,必须进行初始化?
因为在编译阶段,编译期需要根据表达式的结果推导出auto的实际类型。因此,auto比非是是一种"类型"声明,是类型声明时的占位符。当在编译时期,再替换为其实际类型。
auto 的使用场景
auto与指针和引用结合使用的场景
用auto声明初始化指针时,用auto 和auto* 都没有任何的区别。但是,用auto声明初始化引用时,auto必须加&。
这里举一个例子:
int main()
{
int x = 10;
auto a = &x;
auto* b = &x;
auto& c = x;
cout << typeid(a).name() << endl;
cout << typeid(b).name() << endl;
cout << typeid(c).name() << endl;
return 0;
}
上段程序的运行结果为:
在一行中定义多个变量。
auto支持在一行中同时定义多个变量。但是需要注意的是,这些变量必须都是同一个类型的变量。因为编译器智慧根据auto第一个变量进行对其类型的推导,然后根据推导出的类型去定义后面的变量。如果前后变量类型不一样就会导致编译错误。
auto a = 1, b = 2;
auto c = 1.1, d = 2.2;
cout << a << " " << b << endl;
cout << c << " " << d << endl;
- 注意不要和C++98的auto混淆。C++11给auto进行了全新的定义,只保留了auto作为类型指示符的用法。
- auto在范围for中起到非常重要的作用。也在lambda表达式等进行搭配使用。
auto a = 1.1, b = 2;
auto c = 1.1, d = 2.2;
cout << a << " " << b << endl;
cout << c << " " << d << endl;
auto不能推导类型的场景有哪些?
- auto不能用来作为函数的参数。 原因:因为编译器不能够对auto什么的变量进行实际类型的推导。
- auto不能直接用来声明数组。
总结撒花💞
希望大家通过阅读此文有所收获!
😘如果我写的有什么不好之处,请在文章下方给出你宝贵的意见😊。如果觉得我写的好的话请点个赞赞和关注哦~😘😘😘