当前位置:网站首页 > 编程语言 > 正文

auto局部变量(auto变量有什么用)



🎬 博客主页:博主链接
🎥 本文由 M malloc 原创,首发于 CSDN🙉
🎄 学习专栏推荐:LeetCode刷题集 数据库专栏 初阶数据结构
🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📆 未来很长,值得我们全力奔赴更美好的生活✨

在这里插入图片描述
在这里插入图片描述

🐤本篇文章将讲授C++的内联函数相关的知识

😁在C++中,以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。具体如下所示。


在这里插入图片描述

在实操之前我们应该对编译器做一下设置。我这里以vs2022为例,按照下述所示设置

按照上述所示设置完之后我们开始下述观察我这里已经把所有的coding敲好了,我就直接进行调试了,观察下图我们可以发现add函数被展开了,这就意味着没有函数调用建立栈帧的开销,这时的内联函数提升了程序运行时的效率。

在这里插入图片描述

 
  1. inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会用函数体替换函数调用,缺陷:可能会使目标文件变大,优势:少了调用开销,提高程序运行效率。
  2. inline对于编译器而言只是一个建议,不同编译器关于inline实现机制可能不同,一般建议:将函数规模较小(即函数不是很长,具体没有准确的说法,取决于编译器内部实现)、不是递归、且频繁调用的函数采用inline修饰,否则编译器会忽略inline的特性
  3. inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址了,链接就会找不到

优点

  1. 增强代码的复用性。
  2. 提高性能。

缺点

  1. 不方便调试宏。(因为预编译阶段进行了替换)
  2. 导致代码可读性差,可维护性差,容易误用。
  3. 没有类型安全的检查 。

💐在C++的学习过程中,我们会发现越往后学程序用到的类型越来越复杂了。我们来观察下述代码

输入

 

注意

std::map<std::string, std::string>::iterator在上述代码中代表着一个类型,怎么样是不是很长哈哈哈哈。真的特别容易写错,然后这时候就有人会想到我们可以用typedef给这个类型取别名如下所示

 

确实,不可否认的是使用typedef给类型却别名确实简化了代码,但是用typedef会遇到新的难题

在编程时,常常需要把表达式的值赋值给变量,这就要求在声明变量的时候清楚地知道表达式的类型。然而有时候要做到这点并非那么容易,因此C++11给auto赋予了新的含义。这个时候C++11中的auto应运而生

🌱在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它。


🌻C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。请看下述代码

 

注意

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

📖auto与指针和引用结合起来使用用auto声明指针类型时,用auto和auto*没有任何区别,但用auto声明引用类型时则必须加&

 

 

 

 
  1. 为了避免与C++98中的auto发生混淆,C++11只保留了auto作为类型指示符的用法
  2. auto在实际中最常见的优势用法就是跟以后会讲到的C++11提供的新式for循环,还有
    lambda表达式等进行配合使用。

提示:在学习的过程中,我们需要先自行进行思考,并且多去阅读一些大佬的书籍,俗话说的好,书籍是人类进步的阶梯!

  1. 希望本篇文章能对有需要的小伙伴有帮助,我们下期文章再见啦~

好啦今日的分享到这里就结束啦,我是爱你们的M malloc希望可以帮助到你们噢,最后别忘记三连啦!!

在这里插入图片描述

在这里插入图片描述

到此这篇auto局部变量(auto变量有什么用)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • at24c02擦写次数(w25q128擦写次数)2024-12-18 10:54:10
  • 字体图标如何使用(字体图标如何使用图片)2024-12-18 10:54:10
  • 网页传输协议是(传输协议http)2024-12-18 10:54:10
  • 接口403错误是什么(接口403是什么意思)2024-12-18 10:54:10
  • 最终幻想7战斗系统在哪(最终幻想7全战斗报告)2024-12-18 10:54:10
  • 如何安装虚拟机win7系统(怎样装虚拟机wind7)2024-12-18 10:54:10
  • 断开连接的蓝牙耳机如何再次连接(断开连接的蓝牙耳机如何再次连接设备)2024-12-18 10:54:10
  • 虚拟机安装xp系统很卡(虚拟机安装xp系统很卡怎么办)2024-12-18 10:54:10
  • 流量回放英文(流量回放英文翻译)2024-12-18 10:54:10
  • 有趣的代码游戏枪战(有关代码的游戏)2024-12-18 10:54:10
  • 全屏图片