C++入门----内联函数auto范围fornullptr指针

1.内联函数

顾名思义,内联函数也是函数的一种,我们在C语言的学习过程里面知道了函数和宏之间的区别和各自的优缺点;

函数的使用需要建立栈帧,宏的使用需要考虑各种符号的优先级问题,很容易出错,因为宏在使用的时候就是简单的替换,可能不会按照我们想要的计算顺序;

内联函数就是在我们平常的函数前面加上inline关键字,这个内联函数在使用,定义的时候和函数的区别就是,内联函数会在调用的时候,会在调用函数的地方直接进行内联函数的展开,不会建立栈帧(这个也是内联函数存在的原因,因为肯定要有自己的特定功能);

内联函数需要注意很多地方:

(1)我们在定义内联函数的时候,不能把内联函数的定义和声明写在不同的文件里面(这个涉及到编译链接的相关知识),否则就会出现链接错误,因为内联函数不会建立栈帧,不会有自己的地址,就不会到符号表里面,链接的时候在符号表里面找不到,就会出现链接错误;

(2)内联函数即使我们进行定义,这个不是我们说的算的(就算你在函数的前面加上inline这个关键字),编译器在进行编译的时候是会进行审核的,如果我们对某些函数,比如这个函数的函数体特别长,或者是递归函数,即使我们加上inline,编译器还是会按照普通的函数进行处理的,我们一般对于比较短的函数进行设置内联,因为内联函数调用的时候会进行展开,函数体特别长,调用次数特别多的话,每次都要展开,就会造成代码的膨胀,这样就得不偿失了。

2.auto关键字

这个关键字就是进行类型的自动匹配:

下面的typeid.name()就是进行类型的识别;

但是在普通的场景里面,它的用处不大,我们在学习vector的时候,可以使用这个关键字进行代码的简化;

此外,auto不能用来进行定义数组,不用用来作为函数里面的参数的类型,希望读者知悉。

3.范围for

范围for就是用来遍历我们的数组的,我们之前在遍历数组的时候,是这样搞得:

当你学会了范围for之后,我们的数组遍历可以这样写:

是不是很方便,这里浅浅的解释一下自己的理解:我们的auto就是一个类型的识别,我们这里的auto完全可以使用int进行代替,因为这里我们的数组就是int类型的数据,但是如果是其他的double等类型呢?我们使用auto相当于是一个万能胶,什么类型的数组成员都是可以使用这个循环的;

我们的这个e相当于就是一个遍历过程里面的中间变量,我们数组里面的元素传递给e,然后进行打印输出e的结果,这个过程数组什么时候结束,循环执行了多少次,我们都不需要关心,因为这些编译器会解决;

下面我们再看一个现象:

这里,我们显然是想让数组里面的每个数字都乘以2,但是打印的结果却并不是我们想要的,这个原因就是我们的e就是一个中间变量,e的改变并不会影响我们的数组里面的元素的值,如果我们想要实现这个功能使用引用就可以了,这个时候的e就是别名,相当于指针,变化就会同步到我们的数组元素上面去了:

4.nullptr

这个也是C++相对于C语言的改进之处,我们的NULL实际上在标准库里面就是被宏定义为0:

因此我们使用函数的重载调用函数的时候,NULL会被当做int类型,而不是指针类型;

但是nullptr可以解决这个问题,因此我们在C++里面通常使用nullptr而不是NULL。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/572921.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

jmeter之跨线程关联

1)_setproperty函数:将值保存成jmeter属性 2)_property函数:在其他线程组中使用property函数读取属性 一、跨线程接口引用变量 1. 法一:jmeter自带函数_setProperty和_property 1. 1线程组 01 创建登录的【HTTP请求】…

Java知识总结---并发篇

线程 线程的状态 Java中线程可以有如下6中状态: NEW 新创建 RUNNABLE 可运行 BLOCKED 阻塞 WAITING 等待 TIMED WAITING 计时等待 TERMINATED 终止 线程的创建 (1)继承Thread类 public class ExtendsThread extends Thread { O…

后端工程师——C++工程师招聘需求

相比 Java 语言方向,C 入门简单,精通难,找工作竞争压力更小,但 C 依然是近年来招聘的热门岗位之一。本文将从以下三个方面进行详细讲解,帮助你对 C 相关岗位的就业前景、岗位要求、学习路线等有更充分的了解。 C工程师…

48-70V降12V/33V 5A高效同步降压DC-DC——AH1007

AH1007是一款高效率、高压外置MOSFET管降压芯片TEL:186*4884*3702*,芯片典型输入是8V~100V,输出 电压可调,AH1007最大输出电流可支持6A以上,需要注意板子的散热和温升。 AH1007典型开关频率为150KHz。轻载时会自动降低开关频率以…

SSRF—服务器请求伪造 漏洞详解

漏洞简述 SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造,由服务端发起请求的一个网络攻击,一般用来在外网探测或攻击内网服务,其影响效果根据服务器用的函数不同,从而造成不同的影响。 SSRF 形成的原因…

H5点击复制功能 兼容安卓、IOS

效果图 HTML代码 <div>链接&#xff1a;<span style"color: #FF8A21" click"CopyUrl" id"copyId"> https://blog.csdn.net/qq_51463650?spm1000.2115.3001.5343</span> </div>复制方法 const CopyUrl () > {let …

水库大坝安全白蚁监测系统解决方案

一、系统背景 白蚁作为河岸生态系统中的重要病害&#xff0c;不仅会导致水库大坝外部环境发生改变&#xff0c;甚至会引发水库大坝破坏&#xff0c;进而导致自身结构失去稳定性&#xff0c;严重影响水库大坝的正常运行。因此&#xff0c;治理水库大坝白蚁是确保水库大坝工程顺利…

chrome 浏览器 f12 如何查看 websocket 消息?

1. 打开目标页面 2. f12--》网络--》WS&#xff0c;然后刷新页面( 如果不刷页面&#xff0c;就会看不到 websocket 请求&#xff0c;因为 websocket 是长连接&#xff0c;页面加载后只发出一次连接请求&#xff0c;不像 http 接口&#xff0c;不用刷新页面&#xff0c;待会儿也…

Linux Docker下载镜像更改默认存储位置/usr/lib/docker

用于解决docker默认存储位置磁盘空间不足&#xff0c;切换存储位置 1、执行下面命令查看 现在docker的存储位置 docker info | grep "Docker Root Dir" 1.2、如果之前已经下载过镜像可以用mv命令把原来的镜像复制到新的地址 mv /var/lib/docker /data/docker 2、…

十堰着力建设城市级供应链安全检测平台,全力打造数字政府安全示范区

4月23日&#xff0c;十堰市互联网信息办公室、十堰政务服务和大数据管理局、十堰数安技术有限公司共同签订了《城市供应链安全检测平台战略合作框架协议》&#xff0c;通过政企深度协作&#xff0c;加强十堰市数字安全体系建设&#xff0c;为推动十堰市乃至湖北省数字经济产业发…

RS1G08XF5规格详情

RS1G08XF5 是一款由润石&#xff08;RUNIC&#xff09;公司生产的电子元器件。根据所提供的信息&#xff0c;这是一款SOT-23-5封装的器件&#xff0c;其主要参数包括最小电源电压为5V&#xff0c;最大电源电压为6V&#xff0c;最小工作温度为-40C。 为了更准确地了解这款器件的…

【开源】I.Mx6uLL的QT项目合集

文章目录 前言仓库11.下载仓库代码2.使用qmake交叉编译3.效果展示 前言 不定期的更新基于I.Mx6uLL的arm架构下的QT项目合集&#xff1a; 项目移植前的准备 【环境安装】 仓库1 1.下载仓库代码 https://github.com/cocowts/QtCustomcomponent git clone https://github.com/…

ssm框架的网上招聘系统的设计与实现,ssm框架,java编程,mysql数据库 myeclipse开发平台

网上招聘是一个功能很复杂的系统&#xff0c;各个部门之间要有一定的协调能力。 要建立一个高效的管理系统的关键问题就是系统内部的各个模块的相互作用&#xff0c;简单的编写一个网站 只用html &#xff0c;css &#xff0c;javascript &#xff0c;xml &#xff0c;xsl技术…

XUbuntu18.04 源码编译Qt4.5.3的过程

由于新公司很多旧的软件都是基于这个版本做的嵌入式开发。 所以想要自己搭一套基于Linux的非嵌入式开发环境&#xff0c;方便用来调试和编译代码。 这样就可以完成在linux下开发&#xff0c;然后直接嵌入式打包&#xff0c;涉及到界面的部分就不需要上机调试看问题了。 所以…

java 当中的流

初识io 代码演示 private final static String URL "E:\\";private final static String READURL "H:\\kj\\202402\\LS0205.00P";Testpublic void testOutputStream() {long start System.currentTimeMillis();try (InputStream in new FileInputStrea…

RC电路延时时间常数在线计算器

RC电路延时时间常数在线计算器: https://www.838dz.com/calculator/1888.html 急用时&#xff0c;找不到。

古籍数字化平台中的OCR:这个平台更精准

在浩瀚的历史长河中&#xff0c;古籍作为中华民族的文化瑰宝&#xff0c;承载着无数先人的智慧与心血。然而&#xff0c;由于岁月侵蚀、保存不当等多种原因&#xff0c;许多珍贵的古籍面临损坏、失传的危机。为了守护这些无价之宝&#xff0c;云聪研发团队倾力打造了一款尖端的…

portaudio 怎么调用获取输出流

PortAudio是一个跨平台的音频I/O库&#xff0c;它允许你访问计算机的音频硬件进行录音和播放。要使用PortAudio获取输出流&#xff08;播放流&#xff09;&#xff0c;你需要遵循以下步骤&#xff1a; 官方下载地址&#xff1a;PortAudio - an Open-Source Cross-Platform Audi…

AIGC技术的探索与展望:跨界融合与科技变革

文章目录 前言一、AIGC技术的现状与特点二、AIGC技术在各个领域的应用三、AIGC技术对未来社会的影响四、AIGC技术的可能发展方向 前言 随着科技的飞速发展&#xff0c;人工智能与大数据的结合日益紧密&#xff0c;AIGC&#xff08;人工智能生成内容&#xff09;技术作为这一领域…

Linux——web基础实验

实验前的安装 [rootwebserver ~]# yum -y install httpd [rootwebserver ~]# systemctl enable --now httpd Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service. [rootwebserver ~]# echo test for apach…
最新文章