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.mzph.cn/diannao/3176.shtml

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

相关文章

HarmonyOS开发案例:【闹钟】

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

MySQL创建表时添加约束

创建表时添加约束 ①列级约束 演示: CREATE TABLE students( id INT PRIMARY KEY,#主建约束(唯一性,非空) s_name VARCHAR(10) NOT NULL, #非空 s_sex CHAR(1) CHECK(s_sex男 OR s_sex女),#检查约束(Mysql无效) s_seat INT UNI…

数学建模完整版

模型与适用题型 微分方程传染病预测模型 神经网络 层次分析法 粒子群算法 matlab 优劣解距离法

如何为Postgres数据库设置安全的访问控制和权限管理

文章目录 解决方案1. 使用角色和权限管理2. 配置认证方法3. 使用网络访问控制4. 定期审查和更新权限 示例代码1. 创建角色并分配权限2. 配置密码认证3. 配置网络访问控制 总结 PostgreSQL是一个功能强大的开源关系型数据库系统,提供了丰富的权限和访问控制机制&…

前端表单滑块验证码开发

Jsp页面用javascript加 滑动验证条_jsp验证码滑动实现-CSDN博客 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name&quo…

云原生技术助力某制造业巨头构建面向未来的统一技术中台

制造帝国的数字化绮梦 在全球经济一体化和信息化快速发展的今天&#xff0c;制造业的数字化转型已经成为推动产业高质量发展的关键趋势。中国政府高度重视制造业的数字化转型&#xff0c;将其视为实现制造强国战略的核心内容&#xff0c;并出台了一系列政策支持推动发展进程。…

LLM大语言模型(十二):关于ChatGLM3-6B不兼容Langchain 的Function Call

背景 基于本地的ChatGLM3-6B直接开发LangChain Function Call应用&#xff0c;发现其输出的action和action_input非常不稳定。 表现为生成的JSON格式回答非常容易出现不规范的情况&#xff0c;导致LangChain的Agent执行报错&#xff0c;或者进入死循环。 ChatGLM3-6B不兼容La…

基于北京迅为iTOP-RK3588大语言模型部署测试

人工智能&#xff08;AI&#xff09;领域中的大模型&#xff08;Large Model&#xff09;逐渐成为研究的热点。大模型&#xff0c;顾名思义&#xff0c;是指拥有海量参数和高度复杂结构的深度学习模型。它的出现&#xff0c;不仅推动了AI技术的突破&#xff0c;更为各行各业带来…

简单仓库管理系统(增删改查功能)

前端 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>Document</title> …

职场受挫,没有晋升机会怎么办?

和其他人比较没有意义。 每个人的基础不一样&#xff0c;经历不一样&#xff0c;学习方法不一样&#xff0c;无谓的比较只会徒增烦恼。 我们能做的就是&#xff0c;深入了解自己&#xff0c;做自己&#xff0c;找到适合自己的方法&#xff0c;从而快速提升自己。做自己&#…

Pow(x,n)——力扣

python&#xff08;快速幂&#xff09; 50. Pow(x, n) 已解答 中等 相关标签 相关企业 实现 pow(x, n) &#xff0c;即计算 x 的整数 n 次幂函数&#xff08;即&#xff0c;xn &#xff09;。 示例 1&#xff1a; 输入&#xff1a;x 2.00000, n 10 输出&#xff1a;10…

若依ruoyi-vue部署在域名的子目录下应该如何配置

本文相关视频教程&#xff1a;https://www.bilibili.com/video/BV1Fi4y1q74p?p46&vd_source2894aa0e46c09ba98269f266128b6c6e 有些特殊情况需要部署到子路径下&#xff0c;例如&#xff1a;https://www.ruoyi.vip/admin&#xff0c;以下是若依ruoyi-vue部署在域名的子目…

【C++】——类和对象(构造函数,析构函数,拷贝构造函数,赋值运算符重载)

创作不易&#xff0c;多多支持&#xff01; 前言 相信你对这几个知识点有点混淆&#xff0c;相信看完以后&#xff0c;你会对此有一个清晰的认识。 一 类的6个默认成员函数 如果我们写一个类&#xff0c;但是类里面什么都没有&#xff0c;我们称之为空类。 其实这个类也不…

Xtrabackup导致主从延时问题

背景问题 公司数据库备份采用Xtrabackup&#xff0c; 备份期间会导致数据库实例产生主从延时&#xff0c;增加数据库告警数量。而且数据库主从延时会影响数据访问的准确性&#xff0c;延时期间如果主库发生故障&#xff0c;会有数据丢失的风险&#xff1b;延时也可能影响抽数等…

DC-DC电源芯片规格书上的各种参数详解

1.输出电压精确度 输出电压的精确度,也被称为设定点精度,它描述了输出电压的允许误差。该参数通常是在常温,满载和额定输入电压的条件下测得的,它是这样定义的: 输出电压之所以产生误差,是因为元器件本身存在误差,特别是输出端的分压电阻,它将输出电压降低后比PWM比较…

Mac装虚拟机好不好 Mac装虚拟机和装Windows系统一样吗 PD虚拟机

随着跨系统操作的不断发展&#xff0c;虚拟机技术在生产力领域扮演着越来越重要的角色。Mac作为一款主流的操作系统&#xff0c;也有着运行虚拟机的能力。接下来给大家介绍Mac装虚拟机好不好&#xff0c;Mac装虚拟机和装Windows系统一样吗的具体内容。 一、Mac装虚拟机好不好 …

UNIX环境高级编程->高级IO(概念篇)

UINX环境 常见的操作系统比如Linux 和 MacOS都是基于UNIX的。它们都继承了UNIX的许多特性和设计理念。因此&#xff0c;它们的高级I/O技术确实是建立在UNIX基础之上的。Linux和macOS都提供了丰富的高级I/O功能和API&#xff0c;利用了UNIX系统调用和原则。这些功能包括非阻塞I…

【Linux】自定义协议——实现网络序列化和反序列化

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;承接上文内容【Linux】应用层协议序列化和反序列化 目录 &#x1f449;&#x1f3fb;代码实现如下Calculate.hp…

C语言-联合体基本概念

联合体的外在形式跟结构体非常类似&#xff0c;但它们有一个本质的区别&#xff1a;结构体中的各个成员是各自独立的&#xff0c;而联合体中的各个成员却共用同一块内存&#xff0c;因此联合体也称为共用体。 联合体内部成员的这种特殊的“堆叠”效果&#xff0c;使得联合体有如…

HarmonyOS —— 跳转应用详情页

一、跳转应用详情页 鸿蒙跳转应用详情页功能&#xff0c;使用场景可以是引导用户进入应用详情页授予应用权限。 gotoAppDetail(context:common.UIAbilityContext){let bundleName bundleManager.getBundleInfoForSelfSync(bundleManager.BundleFlag.GET_BUNDLE_INFO_DEFAULT)…