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

news2025/1/16 17:56:40

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.coloradmin.cn/o/1623011.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新恒盛110kV变电站智能辅助系统综合监控平台+道巡检机器人

江苏晋控装备新恒盛化工有限公司是晋能控股装备制造集团有限公司绝对控股的化工企业,公司位于江苏省新沂市。新恒盛公司40•60搬迁项目在江苏省新沂市经济开发区化工产业集聚区苏化片区建设,总投资为56.64亿元,该项目是晋能控股装备制造集团重…

Spring - 5 ( 8000 字 Spring 入门级教程 )

一:Spring IoC&DI 1.1 方法注解 Bean 类注解是添加到某个类上的, 但是存在两个问题: 使用外部包里的类, 没办法添加类注解⼀个类, 需要多个对象, ⽐如多个数据源 这种场景, 我们就需要使用方法注解 Bean 我们先来看方法注解如何使用: public c…

YOLOv3没有比这详细的了吧

YOLOv3:目标检测基于YOLOv2的改进 在目标检测领域,YOLO(You Only Look Once)系列以其出色的性能和速度而闻名。YOLOv3作为该系列的第三个版本,不仅继承了前身YOLOv2的优势,还在多个方面进行了创新和改进。…

Linux中的高级IO函数(一)pipe socketpair dup

Linux提供了很多高级的I/O函数。它们并不像Linux基础I/O函数(比如open和read)那么常用(编写内核模块时一般要实现这些I/O函数),但在特定的条件下却表现出优秀的性能。这些函数大致分为三类: 用于创建文件描…

HarmonyOS开发案例:【闹钟】

介绍 使用后台代理提醒,实现一个简易闹钟。要求完成以下功能: 展示指针表盘或数字时间。添加、修改和删除闹钟。展示闹钟列表,并可打开和关闭单个闹钟。闹钟到设定的时间后弹出提醒。将闹钟的定时数据保存到轻量级数据库。 相关概念 [Canva…

数据结构入门——排序(代码实现)(下)

int GetMidi(int* a, int left, int right) {int mid (left right) / 2;// left mid rightif (a[left] < a[mid]){if (a[mid] < a[right]){return mid;}else if (a[left] > a[right]) // mid是最大值{return left;}else{return right;}}else // a[left] > a[mid…

MySQL-----多表查询(一)

目录 一.多表关系&#xff1a; 1.1 一对多(多对一)&#xff1a; 1.2 多对多: 1.3 一对一: 二.多表查询概述&#xff1a; 三.连接查询&#xff1a; 3.1内连接&#xff1a; 3.2外连接&#xff1a; 3.3自连接查询&#xff1a; 3.4联合查询&#xff1a; 一.多表关系&…

测试的分类(3)

目录 按照测试阶段测试 系统测试 冒烟测试和回归测试的区别 验收测试 单元测试, 集成测试, 系统测试, 回归测试之间的关系 是否按手工进行测试 手工测试 自动化测试 自动化测试和手工测试的优缺点 自动化测试优点 自动化测试缺点 手工测试优点 手工测试缺点 按照…

鸿蒙HarmonyOS应用 - ArkUI组件

ArkUI组件 基础组件 Image 声明Image组件并设置图片源 网络权限&#xff1a;ohos.permission.INTERNET Image(scr: string | PixelMap | Resource)// 1. string&#xff1a;用于加载网络图片&#xff0c;需要申请网络权限 Image("https://xxx.png")// 2. PixelMap…

快递物流订阅推送API接口如何对接

快递物流订阅推送API接口指的是订阅国内物流快递信息&#xff0c;当运单状态发生变化时&#xff0c;会推送到您的回调地址&#xff0c;直到这些运单号生命周期结束。简单点说就是先订阅快递单号再推送物流信息。那么快递物流订阅推送API接口该如何对接呢&#xff1f; 首先我们…

JVM学习笔记(四)类加载与字节码技术

目录 一、类文件结构 二、字节码指令 2.3 图解方法执行流程 1&#xff09;原始 java 代码 2&#xff09;编译后的字节码文件 3&#xff09;常量池载入运行时常量池 4&#xff09;方法字节码载入方法区 5&#xff09;main 线程开始运行&#xff0c;分配栈帧内存 6&…

道路检测车理想伴侣,国产高智能道路病害识别系统,可灵活兼容行车记录仪、无人机等数据源!

什么是视觉AI&#xff1f;通俗地说&#xff0c;视觉AI是机器代替人眼来做测量和判断&#xff0c;例如博雅仔为大家介绍的易模真人手办定制项目是基于公司独有的AI将拍摄到的实际影像“翻译”“制作”成数字3D模型&#xff0c;再经过3D打印固化成纪念手办送到用户朋友们的手上。…

将Python机器学习模型集成到C++ Qt客户端应用程序中|Qt调用python详解

0、前言 有几个不同的选项可以将你的Python机器学习模型集成到你的C Qt客户端应用程序中。以下是一些可能的解决方案&#xff1a; 创建API&#xff1a; 将你的机器学习模型部署为一个API服务。你可以使用像Flask这样的轻量级Web框架来创建一个简单的HTTP服务。这样&#xff0…

如何在一台服务器上同时运行搭载JDK 8, JDK 17, 和 JDK 21的项目:终极指南

&#x1f42f; 如何在一台服务器上同时运行搭载JDK 8, JDK 17, 和 JDK 21的项目&#xff1a;终极指南 &#x1f680; 摘要 在企业开发环境中&#xff0c;常常需要在同一台服务器上运行使用不同Java开发工具包&#xff08;JDK&#xff09;版本的多个项目。本文详细介绍如何在L…

华为鸿蒙应用--封装通用标题栏:CommonTitleBar(鸿蒙工具)-ArkTs

0、效果图 自定义通用标题栏 支持左、中、右常规标题栏设置&#xff1b; 支持自定义视图&#xff1b; 支持搜索功能 一、CommTitleBar代码 import router from ohos.router; import { Constants } from ../../constants/Constants; import { StyleConstants } from ../../…

JavaEE 初阶篇-深入了解 UDP 通信与 TCP 通信(综合案例:实现 TCP 通信群聊)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 UDP 通信 1.1 DatagramSocket 类 1.2 DatagramPacket 类 1.3 实现 UDP 通信&#xff08;一发一收&#xff09; 1.3.1 客户端的开发 1.3.2 服务端的开发 1.4 实现 …

FTP与SMB深度对比:文件传输协议谁更胜一筹?

在数字化时代&#xff0c;文件传输已成为日常工作中不可或缺的一部分。 FTP&#xff08;文件传输协议&#xff09;和SMB&#xff08;服务器消息块&#xff09;是两种最为常见的文件传输协议。它们各自在文件传输领域拥有独特的优势和特点&#xff0c;但同时也存在一些差异。 今…

六个月滴滴实习:轻松、舒心又高薪!

不久前&#xff0c;一位在滴滴后端研发部门实习了六个月的小伙伴在牛客网上分享了他的实习体验&#xff0c; 作者详细描述了他在滴滴的实习生活。 从他的叙述中&#xff0c;我们可以感受到与其他互联网公司相比&#xff0c;滴滴的工作环境显得相对轻松和舒适。 他提到&#x…

【汇编语言】流程转移和子程序

【汇编语言】流程转移和子程序 文章目录 【汇编语言】流程转移和子程序前言一、“转移”综述二、操作符offset三、jmp指令jmp指令——无条件转移jmp指令&#xff1a;依据位移进行转移两种段内转移远转移&#xff1a;jmp far ptr 标号转移地址在寄存器中的jmp指令转移地址在内存…

神经网络进阶

⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计3077字&#xff0c;阅读大概需要3分钟 &#x1f308;更多学习内容&#xff0c; 欢迎&#x1f44f;关注&#x1f440;【文末】我的个人微信公众号&#xf…