C++:入门篇(补充C语言中的不足)

news2024/12/21 20:12:47

前言
这篇文章是C++的第一篇文章,主要是补充C语言中存在的不足而扩展的一些新的语法,有了这篇文章作为杂序,后面再介绍其他内容就要清晰地多

C++:入门篇

  • 一、namespace 命名空间
    • (一)域的概念
    • (二)命名空间的使用
      • 1、创建命名空间域
      • 2、命名空间域的嵌套使用
      • 3、using 关键字
  • 二、缺省参数
  • 三、函数重载
  • 四、引用
    • (一)引用的使用
    • (二)const 引用
      • 1、变量的权限不能放大
      • 2、指针的权限不能放大
      • 3、临时对象
    • (三)引用和指针的区别
  • 五、inline 关键字
    • (一)宏的不足
    • (二)inline 的用法
  • 六、nullptr 关键字
    • (一)C语言中的NULL
    • (二)nullptr 关键字
      • 结束语

一、namespace 命名空间

在全局区中,c++可能定义有变量、函数、类,而太多的变量定义可能会导致重定义的问题,尤其是小组中多人在进行代码合并时候,往往容易导致错误。我们引入namespace 命名空间关键字。

下面的代码说明在头文件中已经有了 rand 函数了,我们以这个函数名作为变量名必定会产生冲突。
在这里插入图片描述
在这里插入图片描述

(一)域的概念

1、C++中域有函数局部域,全局域,命名空间域,类域
2、域影响的是编译时语法查找⼀个变量/函数/类型出处(声明或定义)的逻辑,有了域隔离,名字冲突就解决了。
3、局部域和全局域除了会影响编译查找逻辑,还会影响变量的⽣命周期,命名空间域和类域不影响变量⽣命周期。

(二)命名空间的使用

1、namespace 只能定义在全局,当然他还可以嵌套定义
项⽬⼯程中多⽂件中定义的同名namespace会认为是⼀个namespace,不会冲突。
C++标准库都放在⼀个叫==std(standard)==的命名空间中

1、创建命名空间域

这里我们创建了一个命名空间域,因此 rand 变量依旧可以创建在全局区
在这里插入图片描述
在访问命名空间域中的变量时必须标注域的名字。(后面学的类域也是相似)
在这里插入图片描述

2、命名空间域的嵌套使用

这种用法一般是用来解决两个程序员合并代码时候的问题,假如A, B两人都想使用 rand 来作为全局变量,可以用下面的方式
在这里插入图片描述
在这里插入图片描述

3、using 关键字

命名空间域中我们要访问函数或者变量时太麻烦了,有没有办法可以使得我们不加前面的 :: 呢

半放式 : 将命名空间中不与其他全局变量重名的放回全局区
在这里插入图片描述
全放式: 将命名空间的成员全部放在全局区中,但是容易造成错误。因此在项目中不推荐使用 using namesapce std;
在这里插入图片描述

二、缺省参数

缺省参数是声明或定义函数时为函数的参数指定⼀个缺省值。在调⽤该函数时,如果没有指定实参则采⽤该形参的缺省值,否则使⽤指定的实参,缺省参数分为全缺省和半缺省参数。

在这里插入图片描述

三、函数重载

C++⽀持在同⼀作⽤域中出现同名函数,但是要求这些同名函数参数个数不同或者类型不同。这个就叫函数重载。

参数类型不同
在这里插入图片描述

参数个数不同
在这里插入图片描述
参数顺序不同
在这里插入图片描述
参数返回值不同
在这里插入图片描述
存在歧义
在这里插入图片描述

四、引用

类型& 引⽤别名 = 引⽤对象;
引⽤不是新定义⼀个变量,⽽是给已存在变量取了⼀个别名,编译器不会为引⽤变量开辟内存空间,它和它引⽤的变量共⽤同⼀块内存空间。
引⽤在定义时必须初始化,引⽤⼀旦引⽤⼀个实体,再不能引⽤其他实体

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

(一)引用的使用

引⽤在实践中主要是于引⽤传参和引⽤做返回值中减少拷⻉提⾼效率和改变引⽤对象时同时改变被
引⽤对象

在这里插入图片描述

(二)const 引用

核心是权限不能放大

1、变量的权限不能放大

在这里插入图片描述

2、指针的权限不能放大

在这里插入图片描述

3、临时对象

int& rb = a3; double d = 12.34; int& rd = d
这样⼀些场景下a
3的和结果保存在⼀个临时对象中存储中间值,也就是时,rb和rd引⽤的都是临时对象,⽽C++规定临时对象具有常性,所以这⾥就触发了权限放⼤,必须要⽤常引⽤才可以。

在这里插入图片描述

(三)引用和指针的区别

• 语法概念上引⽤是⼀个变量的取别名不开空间,指针是存储⼀个变量地址,要开空间。
• 引⽤在定义时必须初始化,指针建议初始化,但是语法上不是必须的。
• 引⽤在初始化时引⽤⼀个对象后,就不能再引⽤其他对象;⽽指针可以在不断地改变指向对象。
• 引⽤可以直接访问指向对象,指针需要解引⽤才是访问指向对象。
• sizeof中含义不同,引⽤结果为引⽤类型的⼤⼩,但指针始终是地址空间所占字节个数(32位平台下
占4个字节,64位下是8byte)
• 指针很容易出现空指针和野指针的问题,引⽤很少出现,引⽤使⽤起来相对更安全⼀些

五、inline 关键字

(一)宏的不足

C语言中的宏在使用时候往往会产生一些错误,使用 inline就是为了解决这个问题
首先排除我们写宏时候容易少写括号造成错误看下面这种情况,因为没有正确的写宏#define MUL(a, b) ((a) * (b))造成错误,从而有了两个答案。

在这里插入图片描述
再看这种情况,宏的内容写得没有问题,但是因为宏的机制造成错误
在这里插入图片描述
综上,我们有了inline 关键字.

(二)inline 的用法

•⽤inline修饰的函数叫做内联函数,编译时C++编译器会在调⽤的地⽅展开内联函数,这样调⽤内联函数就不需要建⽴栈帧了,就可以提⾼效率。
• inline对于编译器⽽⾔只是⼀个建议,加了inline编译器也可以选择在调⽤的地⽅不展开,不同编译器关于inline什么情况展开各不相同,因为C++标准没有规定这个。inline适⽤于频繁调⽤的短⼩函数,对于递归函数,代码相对多⼀些的函数,加上inline也会被编译器忽略。
• inline不建议声明和定义分离到两个⽂件,分离会导致链接错误。因为inline被展开,就没有函数地址,链接时会出现报错。
在这里插入图片描述

六、nullptr 关键字

(一)C语言中的NULL

在C语言中,NULL是一个宏,定义为0

#ifndef NULL
     #ifdef __cplusplus
         #define NULL 0
     #else
         #define NULL ((void *)0)
     #endif
#endif

这个情况会造成一些谬误
在这里插入图片描述

(二)nullptr 关键字

C++11中引⼊nullptr,nullptr是⼀个特殊的关键字,nullptr是⼀种特殊类型的字⾯量,它可以转换成任意其他类型的指针类型。使⽤nullptr定义空指针可以避免类型转换的问题,因为nullptr只能被隐式地转换为指针类型,⽽不能被转换为整数类型。

在这里插入图片描述

结束语

这是小编C++的第一篇文章,如果觉得文章看了有收获,可以多多关注哦

在这里插入图片描述

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

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

相关文章

【深度学习讲解笔记】第1章-机器学习基础(2)

模型与函数构造 之前讲到,模型是由机器学习决定参数值的函数,通过训练,机器可以找出最好的一组参数使得函数的输出最优。常见的模型有线性模型,指数模型,对数模型等。在线性模型中,w和b是可学习的参数&…

【Hadoop|HDFS篇】DataNode概述

1. DataNode的工作机制 1)一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。 2)DataNode启动后向NameNod…

象过河在线进销存软件——简单、高效、智能,让生意更简单!

仓库管理,曾是我心中的一大“乱麻”——库存不清、数据混乱、出入库效率低... 但自从邂逅了【象过河在线进销存软件】,一切都变得那么简单、高效、智能! 象过河在线进销存软件优势: 1、界面简洁,流程简单 作为亲身体…

【时时三省】(C语言基础)指针进阶 例题4

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 strlen是求字符串长度 这个需要算上\0 第一个arr 是打印6 因为它加上\0是有六个元素 第二个arr0 数组名相当于首元素的地址 a的地址加0还是a的地址 所以这个地方还是…

Linux日志-kdump日志

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 Linux 系统中的日志是记录系统活动和事件的重要工具,它们可以帮助管理员监视系统状态、调查问题以及了解系统运行…

IDEA Maven 源修改为国内阿里云镜像的正确方式

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storm…

RT-Thread Nano版本在STM32F103RB上的快速移植

目录 概述 1 RT-Thread Nano 1.1 Nano版本介绍 1.2 RT-Thread Nano的特点 2 STM32Cube 创建工程 2.1 STM32Cub配置板卡参数 2.2 项目程序架构 3 移植RT-Thread 3.1 Keil IDE加载RT-Thread 3.2 解决上面两个ERROR 3.2.1 ERROR-1: 3.2.2 ERROR-2 3.3 移植FINSH 3.4…

数据结构与算法-morris遍历

morris遍历的优点在于节省空间,因为不需要递归。 public class MorrisTraversal {public static void main(String[] args) {Node head new Node(4);head.left new Node(2);head.right new Node(6);head.left.left new Node(1);head.left.right new Node(3);h…

实验二 局域网与互联网的连接

一、实验目的 1.掌握网络工程中网络拓扑设计与设备选型 2.掌握局域网与互联网的连接技术。 3.掌握访问控制规则的设置方法。 二、实验描述 某中学校园网网络初步规划如下:学生机房使用192.168.10.0/24网段;办公主机使用192.168.20.64/29网段&#x…

基于JAVA+SpringBoot+Vue的企业级工位管理系统

基于JAVASpringBootVue的企业级工位管理系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末附源码下载链接🍅 …

C++之运算符

除法 / 结果的数据类型与除数 被除数 保持一致 (除数即分母 不能为0) 取模取余数 % (除数即分母 不能为0) a a 赋值运算符 逻辑运算符:非 与 或 非: 与:同真为真,其余为假 或&am…

大模型背后的秘密武器:向量数据库引领数据革命

在探讨为何向量数据库会成为大模型热潮中的基础设施之前,我们首先需要深入理解非结构化数据的本质、其迅猛增长的动因,以及这一趋势如何驱动了数据存储与检索技术的革新。随着人工智能(AI)技术的飞速发展,特别是在自然语言处理(NLP)、计算机视觉(CV)等领域的突破性进展…

.net 调用海康SDK实现NVR录像视频的下载

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,最近一直被测试拿捏,痛苦的挣扎中… 我们面对的不仅仅是技术还有人心,人心不可测,海水不可量,唯有技术,才是深沉黑夜中的一座闪烁的灯…

简单计算机网络概念

1.浏览器过程 输入url,解析url 1.协议http、https的区别;HTTPS就是在HTTP与TCP之间增加了SSL/TSL安全传输层 2.格式:协议//主机:端口/路径; 3.HTTP版本:1.0和1.1 4.HTTP/1.1:1. 持久连接:为了…

Windows子系统Ubuntu安装MySQL及windows的navicate连接

Windows子系统Ubuntu安装MySQL及局域网连接 MySQL8.0之前 mysql8.0版本

证件照背景替换软件有哪些?证照之星怎么换背景色

在照相馆拍的证件照不满意,自行在家拍摄了证件照,却不会处理复杂的照片背景怎么办呢?其实可以使用专业软件来替换证件照背景。这篇文章就告诉大家证件照背景替换软件有哪些,证件照背景替换怎么弄。 一、证件照背景替换软件有哪些…

4千6历年高考英语试题大全ACCESS\EXCEL数据库

《历年高#考英语试题大全ACCESS数据库》搜集了大量的全#国各#地高#考英语模拟试题,每道题目均有相应的答案和解析;这种数据虽然没有《一站到底》类的数据结构(一个选项一个字段)那么好,但是通过技术人员还是可以很简单…

基于SSM的图书馆管理系统的设计与实现 (含源码+sql+视频导入教程+文档+PPT)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM的图书馆管理系统7拥有两种角色:管理员和用户 管理员:图书管理、类型管理、借阅管理、续借管理、归还管理、罚金管理、留言管理等 学生用户:借…

前端速通面经八股系列(八)—— React篇(上)

React目录 一、组件基础1. React 事件机制2. React的事件和普通的HTML事件有什么不同?3. React 组件中怎么做事件代理?它的原理是什么?4. React 高阶组件、Render props、hooks 有什么区别,为什么要不断迭代5. 对React-Fiber的理解…

眼科市场格局固化,排名靠后的光正眼科还能逆袭吗?

眼科是A股的热门领域,也是医疗的黄金赛道。或许也正因为如此,这条赛道已经习惯了通过并购,利用资本杠杆跑马圈地。以最大规模的龙头爱尔眼科为首,并购是眼科的常规操作。 然而,真正观察赛道腰部及以下的公司&#xff…