【C++入门】详解(上)

目录

💕1.C++中main函数内部———变量的访问顺序

💕2.命名空间域namespace

💕3.命名空间域(代码示例)(不要跳)

💕4.多个命名空间域的内部重名

💕5.命名空间域的展开

💕6.展开的本质

💕7.输入输出流(IO)

💕8.缺省函数


(最新更新时间——2025.1.9)

魔不魔 正不正 天地自有风九歌

走不走 留不留 死生皆在我心头

💕1.C++中main函数内部———变量的访问顺序

在C++中,main函数内部的变量的访问是有顺序存在的,其顺序分别为(从高到低):->

局部变量——全局变量——命名空间域

具体是什么意思?请看代码:

84314f0e6c6745c68650597d284b15e7.png

在局部变量与全局变量都存在时,main函数会优先访问局部变量,这也叫做局部优先原则


但如果不存在局部变量a=10呢?

f929be3f5e104c8bb242d6ff3034a428.png

当局部变量被去除后,main函数内部还是会遵循访问顺序来访问,但是它访问不到局部变量a,所以它就会去访问全局变量a


ffc585fa930044f3b7f5d43fcfdf8320.png

但这又是什么原因呢?有的人肯定会认为,这是因为rand是一个随机函数,创建rand变量就会与函数重名,但是这种原因是半对的,接着请看下图:->:

382bc71474744a2b8f7a8c169ae0f4f1.png

我把rand放在这里又可以打印出来了,这是为什么?

其实真正的原因是,在全局变量的rand与头文件#include<stdlib.h>是在同一作用域下,(即全局作用域),在同一作用域下的rand函数与rand变量命名重复,所以才会出现第一种报错的情况

关于第二种情况,则是作用域不同导致的,因为rand函数作用在全局作用域,rand变量作用在局部作用域,所以,作用域不同,它们的效果也不同


那么,有没有一种方法,可以解除第一种情况呢?答案是有的,请看一下讲解:->:

💕2.命名空间域 namespace

什么是命名空间域?

在C++中,每一个命名空间域就相当于一个田地,在这个田地中可以有各种东西,如变量,结构体,函数等等,而你可以给这个田地命名,让它变为独一无二的田地(命名作用域),

命名空间域的书写:

namespace 专属名
{//任意
}

我们以第一大点中错误的rand命名为例

3b5982b430884f03ba01b500f5da12ca.png

如图所见,我们创建了命名空间域abc,在执行printf时,会优先在局部变量中找,找不到,再去全局变量,又找不到,最后去命名作用域找


注意:->我们在调用命名作用域时,运用到了 abc:: ,这表示访问命名作用域中的abc,当我们访问除了局部变量时的作用域,都可以这么表示,全局变量同理,如下图:

800760d8fd4d4df0a4cd5c753131398d.png

如图,在我们想用 ::访问全局变量时,需要注意的是::前面是有一位空格的

💕3.命名空间域(代码示例)(不要跳)

 接下来是命名空间域的实际代码举例,包括(函数,结构体),以及命名作用域的嵌套


1.首先是 函数以及结构体 的调用方法

c265bf0005f741788e3ccb419f5db34c.png


2.命名空间域的嵌套

4c4b55228bb546aca53ef15125e8c883.png

💕4.多个命名空间域的内部重名

多个命名空间域可以在各自的内部重名吗?答案是可以的,因为每一个命名空间域都相当于一个菜园子,你的菜园子有变量A,我的菜园子就不能有了吗?那么代码举例如下:

94428861011748f99e3e38ef0fcdca7e.png

如图可见,不同命名空间域的内部是可以重名的,但是每一个命名空间域是不可以重名的,除非使用命名空间域嵌套-给重名的命名空间域分开

💕5.命名空间域的展开

在我们写main函数时,每使用一次命名空间域都要写一次a::,是不是很麻烦,如图:
df7570be585c4e938428194cafe82365.png

有没有一种方法,可以不这么麻烦呢?答案是有的兄弟,有的,像这么强的操作还有9....,

1种方法

那就是展开命名空间域

我们使用

using namespace 空间域名

 来进行展开

0219b0bd39624e1a90b54f8babc103c7.png

如图,我们就不要再使用a::来访问了


但如果我们只想展开其中的一个呢?

代码如下:

2e6c157a6e84415ea4ee0816424386d0.png

using 空间域名::空间域变量

这里就单独展开了空间作用域a中的b,再举一个例子,单独展开空间作用域里的函数或者结构体,先是展开函数,后是展开结构体

68fe2c5449784044a2da8ba073180ec4.png71dd4f7c194d44f98c4dc6d125a226f6.png

💕6.展开的本质

 在C++中,使用using展开的本质是将命名空间域展开到全局作用域中,举例如下:

这是不展开的情况:可以看到没有报错,逻辑也符合我们所讲的,作用于全局作用域

2f50ecbe582947eea0794687302e9391.png


但如果我们展开了呢?

c5fdb4e109ec442f855d08d1fac3be52.png

如图,就会发生错误,因为展开后的空间作用域相当于变为了全局作用域,而变量的访问顺序是局部,全局,空间作用域,展开后的全局作用域中有两个相同名称的函数,那么main函数内部就会不知道调用哪个add函数

💕7.输入输出流(IO)

 在C++中,创建了新的输入和输出,它们的书写方式是:->

#include<iostream>
using namespace std;
int main()
{	int i = 0;int j = 0;cout << 20 << '\n' << 30 << '\n' << endl;//输出20,30   '\n'是换行cin >> i >> j;//输入 i jcout << i << " " << j << endl;//输出 i 空格 j
}
效果如下:
d33183b1dee5430eab8cc9c70b5ccb40.png

接下来是逐步讲解:

1.为什么要用using space std;

答案:->:因为#include<iostream>是一个标准头文件,而这个头文件,其实是一个巨大的空间域 ,因此在使用时,我们需要先展开空间域std,否则就需要写成:

#include<iostream>
int main()
{	int i = 0;int j = 0;std::cout << 20 << '\n' << 30 << '\n' << std::endl;//输出20,30   '\n'是换行std::cin >> i >> j;//输入 i jstd::cout << i << " " << j << std::endl;//输出 i 空格 j
}

2.cout是什么,cin是什么?

cout与cin都是空间域std里面的函数,cout表示输出除去,cin表示输入进来,当然如果各位不想用,printf与scanf也是可以正常使用在C++中的


3.endl是什么?

这里的endl,(注意不是end1,是英文L),endl在C++中表示的就是换行的意思

💕8.缺省函数

什么是缺省函数?

缺省函数是C++中的一种函数,它支持了你在给函数传参时不需要将所有参数都传过去,代码如下->:

aad21cd83db94f6cae885fb8679e97f2.png

我们发现,即使什么都没传过去,也依旧输出了200,而且我们在创建函数时,将形参初始化了

而这种每个函数在接收处都初始化的函数,叫做全省函数


有部分初始化的叫做半缺省函数,如下:

7d9c9a0ff4ff4fe6aa2a18bc6653fff8.png

半缺省函数,需要从右往左缺省,不可以从左往右缺省,因为没有初始化的形参是必须传入值的,如果从左往右缺参,那就意味着我们不得不全部传参一遍

所以半缺省函数是要从右往左缺省的


那有的人问了,诶?那我跳着传不就可以了,但其实这是不可以的,代码如下:

3ccae3c6ff084a419b39e0a5316b2a18.png

答案显而易见,必须顺序传,不能跳跃着传

2a775d9141e049b28a499aa8c5166913.png

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

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

相关文章

Ungoogled Chromium127 编译指南 MacOS篇(八)- 开始编译

1. 引言 完成了所有依赖包的安装后&#xff0c;我们终于来到了最关键的编译阶段。在开始编译之前&#xff0c;有一些重要的配置信息需要了解。本文将指导您完成整个编译过程。 2. 签名相关说明 虽然在我们的测试编译中不需要进行签名操作&#xff0c;但了解官方的签名要求仍…

使用uniapp 微信小程序一些好用的插件分享

总结一下自己在开发中遇见的一问题&#xff0c;通过引入组件可以快速的解决 1.zxz-uni-data-select 下拉框选择器(添加下拉框检索&#xff0c;多选功能&#xff0c;多选搜索功能&#xff0c;自定义 下拉框插件&#xff0c;使用这个的原因是因为 uniui uview 组件库下拉框太…

腾讯云AI代码助手编程挑战赛-有趣的冷知识分享

作品简介 有趣的冷知识这一编程主要用于对于小朋友的探索力的开发&#xff0c;让小朋友在一开始就对学习具有探索精神。在信息化时代下&#xff0c;会主动去学习自己认知以外的知识&#xff0c;同时丰富了眼界&#xff0c;开拓了新的知识。 技术架构 使用python语言的TK库…

使用 SQL 和表格数据进行问答和 RAG(7)—将表格数据(CSV 或 Excel 文件)加载到向量数据库(ChromaDB)中

将表格数据&#xff08;CSV 或 Excel 文件&#xff09;加载到向量数据库&#xff08;ChromaDB&#xff09;中。这里定义的类 PrepareVectorDBFromTabularData&#xff0c;它的主要功能是读取表格数据文件到DataFrame中、生成嵌入向量、并将这些数据存储在向量数据库的集合中&am…

攻防世界 wtf.sh-150

点进去&#xff0c;发现是一个类似于论坛的网站&#xff0c;并且对报错等做了处理 用御剑扫描一下 ​ 发现是php形式的文件&#xff0c;但点进去访问不了。看看wp&#xff0c;发现此题存在路径穿越漏洞&#xff0c;就是&#xff08;如果应用程序使用用户可控制的数据&#xff0…

【Spring】Redis缓存+ehcache

文章目录 基于Spring的RedisehcacheRedis 缓存配置Cacheable 注解CacheEvict 注解缓存配置 基于Spring的Redisehcache Redis 缓存配置 在项目中添加 Redis 的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot…

UE5 打包要点

------------------------- 1、需要环境 win sdk &#xff0c;大约3G VS&#xff0c;大约10G 不安装就无法打包&#xff0c;就是这么简单。 ----------------------- 2、打包设置 编译类型&#xff0c;开发、调试、发行 项目设置-地图和模式&#xff0c;默认地图 项目…

小程序textarea组件键盘弹起会遮挡住输入框

<textarea value"{{remark}}" input"handleInputRemark" ></textarea> 如下会有遮挡&#xff1a; 一行代码搞定 cursor-spacing160 修改后代码 <textarea value"{{remark}}" input"handleInputRemark" cursor-spacin…

git的rebase和merge的区别?

B分支从A分支拉出 1.git merge 处于A分支执行&#xff0c;git merge B分支:相当于将commit X、commit Y两次提交&#xff0c;作为了新的commit Z提交到了A分支上。能溯源它真正提交的信息。 2.git rebase 处于B分支&#xff0c;执行git rebase A分支&#xff0c;B分支那边复…

Cadence——virtuous生成的symbol其端口自动添加注释

新换的工艺库&#xff0c;环境变量也会发生变化&#xff0c;毕竟每一家PDK下的.cdsinit 和 .cdsenv文件不尽相同。 这次新换的PDK&#xff0c;搭建完Schcematic之后&#xff0c;再生成的Symbol&#xff0c;发现其pin口&#xff0c;也就是端口没有自动生成注释&#xff0c;我就…

CClinkIEfield Basic转Modbus TCP网关模块连接三菱FX5U PLC

捷米特JM-CCLKIE-TCP是自主研发的一款CCLINK IE FB从站功能的通讯网关。该产品主要功能是将各种 MODBUS-TCP 设备接入到 CCLINK IE FB网络中。 捷米特JM-CCLKIE-TCP网关连接到CCLINK IE FB总线中做为从站使用&#xff0c;连接到 MODBUS-TCP 总线中做为主站或从站使用。 为了打破…

《分布式光纤测温:解锁楼宇安全的 “高精度密码”》

在楼宇建筑中&#xff0c;因其内部空间庞大&#xff0c;各类电器设施众多&#xff0c;如何以一种既高效又稳定&#xff0c;兼具低成本与高覆盖特性的方式&#xff0c;为那些关键线路节点开展温度监测&#xff0c;是目前在安全监测领域一项重点研究项目&#xff0c;而无锡布里渊…

开关电源设计中的穿越频率选取

摘要 在开关电源设计之中&#xff0c;穿越频率是一个相当重要的指标。在文中从就开关电源设计中的环路反馈控制方法、环路增益作用进行了阐述。并在此基础上就穿越频率选取的限制条件进行分析&#xff0c;为开关电源设计中的穿越频率选取提供借鉴。 开关电源设计过程中&#x…

探索 INFINI Console:提升 Elasticsearch 管理效率的新利器

1、常见的 Elasticsearch 可视化客户端介绍 1.1 Head 插件 这是一个非常老牌的 Elasticsearch 可视化插件&#xff08;现在改名了 Multi Elasticsearch Heads&#xff09;&#xff0c;通常以 Chrome 插件或网页形式存在&#xff0c;用来查看集群的节点状态、索引元数据&#x…

黄仁勋CES 2025演讲重点内容

黄仁勋CES 2025演讲重点内容 硬件产品发布 GeForce RTX 50系列GPU&#xff1a; 架构与性能提升&#xff1a;正式发布的新一代GeForce RTX 50系列GPU采用英伟达旗舰的Blackwell架构&#xff0c;这是自25年前引入可编程着色技术以来计算机图形领域最重大的创新。该系列显卡在图形…

【Redis】简介|优点|使用场景|为什么Redis快

目录 一、简介 二、特性&#xff08;优点&#xff09; 三、使用场景 一、简介 内存中存储数据的中间件&#xff0c;用于数据库&#xff0c;数据缓存&#xff0c;在分布式系统中能够大展拳脚 中间件&#xff1a;应用程序可以直接从 Redis 中获取数据&#xff0c;而不必频繁地…

UI自动化测试框架playwright--初级入门

一、背景&#xff1a;UI自动化的痛点&#xff1a; 1、设计脚本耗时&#xff1a; 需要思考要如何模拟用户的操作&#xff0c;如何触发页面的事件&#xff0c;还要思考如何设计脚本&#xff0c;定位和操作要交互的元素、路径、位置&#xff0c;再编写代码逻辑&#xff0c;往复循…

不同方式获取音频时长 - python 实现

DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 需要更多数据资源和技术解决方案&#xff0c;知识星球&#xff1a; “DataBall - X 数据球(free)” -------------------------------------------------------------…

数学建模入门——建模流程

摘要&#xff1a;本文介绍了数学建模的一般流程概述。 目录 一、前言 二、数据预处理 三、描述性统计分析 四、模型建立 五、模型评价 一、前言 本文将为想要入门数学建模的同学讲述数学建模的一般流程。但数学建模流程并非一成不变。虽有大致步骤&#xff0c;像分析问题、…

人工智能及深度学习的一些题目(三)

1、【填空题】 使用RNNCTC模型进行语音识别&#xff0c;在产生预测输出时&#xff0c;对于输入的音频特征序列通过网络预测产生对应的字母序列&#xff0c;可以使用&#xff08; beamsearch &#xff09;算法进行最优路径搜索。 2、【填空题】 逻辑回归模型属于有监督学习中的&…