当前位置: 首页 > news >正文

c++之命名空间详解(namespace)

引例

在学习之前我们首先了来看这样一个情形:

在c语言下,我们写了两个头文件:链表和顺序表的。我们会定义一个type(typedef int type)方便改变数据类型(比如将int改成char),来做到整体代换。

但是我们两个头文件里面都有type,我们又同时引用两个头文件,就会导致type重定义。而解决办法就要宏条件,所以很麻烦修改。

命名空间

那么我们今天学的东西就可以解决以上问题。

首先我们要了解一个基础知识,我们代码只会查看公共空间(全局,和局部),对于创建的空间是没有权限访问的

关键词 namespace

这个是命名空间的意思,因为我们在写代码的时候,定义的变量、函数、类都可能会相同,有报错的风险,所以我们就可以将他们放到不同的空间里面,将它面隔离开来。

我们看以下代码

这里有两个参数一样的add函数,系统肯定会报错,因为不知道用哪个,那么我们就可以将其中一个用命名空间包括起来

命名空间的创建

以上就是我们创建的命名空间叫dgj

这个空间里面有整形a,函数add

那么就只能访问下面的add和局部变量a。

如果我们要访问dgj里面的东西怎么办呢?

空间限定操作符 ::

我们只要在对于变量、函数、类之前加上“命名空间::”就可以限定空间了

我们之前的结果是

将代码改成

那么就会变成

另外对于一下函数我们如何访问全局变量a呢?

我们只要这样就行

如果::之前没有命名空间,那么就是指的全局空间。

标准命名空间 

我们在引用官方头文件的时候,我们自己写的函数也有可能和官方函数有重名,那么我们的也有官方命名空间std(standard)来区分。自行观察我们就可以发现我们用到官方的cout和endl函数都必须要加std::它们不属于全局空间和局部空间,如果不加限定是访问不到的。

命名空间的合并性

我们写头文件一般有.h和.cpp两个文件,那么为了防止重名我们两个文件都要被命名空间括起来。

是不是要定义两个命名空间呢?不是,我们只要定义一个命名空间,编译器会自动把它当作整体。

那不然我们的官方头文件有很多,官方命名空间就不是一个std了。

在同一个文件里面也可以写多个相同名字的命名空间,也是当作一个命名空间

命名空间的展开

我们可能经常用某个命名空间,一直用“命名空间::”不是很方便,所以我们可以直接展开某个命名空间,那么接下来的代码的变量、函数、类就会优先使用这个命名空间的,除非用“命名空间::”指明是其他命名空间的。

语法就是(以std为例)

那么在下面的代码我们就会默认使用std命名空间的,里面的cout、endl也不需要用::来限定空间。

注意:这里的展开和我们头文件的展开是不同的,我们学过文件的编译链接就知道我们的头文件是在预编译展开成代码插入到我们的代码里面的。但是我们的命名空间并不是展开成什么代码,只是一种虚拟的展开。

单独展开命名空间里面的某一个变量、函数、类

但是我们直接展开一个比较大的命名空间,也是会有可能出现重定义的,特别是在以后的工作里面。所以我们可以只展开某个常用命名空间的某一个。

例如我们用dgj这个命名空间来举例:

那么下面的变量a就是优先使用命名空间dgj里面的东西。而出了这个以外的东西就不是默认使用的。

命名空间的嵌套

命名空间是可以在命名空间里面定义的,举例:

这个命名空间就有两个子命名空间。

如果要使用就是

或者只是用其中的一个

或者不展开,我们只是限制命名空间:

就是像剥洋葱一样一层一层向里。

类的命名空间举例

另外我这里举例类的相关例子:

这里的类也是一个对应的命名空间,那么我们可以限定空间来操作里面的变量、函数等。

命名空间的实际运用

例如一个公司要搞一个项目,然后项目肯定要分项目组,比如美术页面,底层逻辑等等,最后这些项目是要合到一起的。所以为了防止重定义,就让这几个项目组创建自己的命名空间例如A,B,C,D...

然后在项目A里面就会有很多人,为了防止这些人的命名重复导致重定义,那么每个人都会有一个命名空间,这里也体现了嵌套命名空间的意义。

那么通过上面的操作,我们就可以完美的避免合代码时出现重定义等相关错误。

看到最后了,觉得不错的就点个赞吧🙂

相关文章:

c++之命名空间详解(namespace)

引例 在学习之前我们首先了来看这样一个情形: 在c语言下,我们写了两个头文件:链表和顺序表的。我们会定义一个type(typedef int type)方便改变数据类型(比如将int改成char),来做到整体代换。 但是我们两个头文件里面…...

【大模型】在大语言模型的璀璨星河中寻找道德的北极星

在大语言模型的璀璨星河中寻找道德的北极星 引言一、概念界定二、隐私保护的挑战2.1 数据来源的道德考量2.2 敏感信息的泄露风险 三、偏见与歧视的隐忧3.1 训练数据的偏见传递3.2 内容生成的不公倾向 四、责任归属的模糊地带4.1 生成内容的责任界定4.2 自动化决策的伦理考量 五…...

嵌入式Linux之Uboot简介和移植

uboot简介 uboot 的全称是 Universal Boot Loader,uboot 是一个遵循 GPL 协议的开源软件,uboot是一个裸机代码,可以看作是一个裸机综合例程。现在的 uboot 已经支持液晶屏、网络、USB 等高级功能。 也就是说,可以在没有系统的情况…...

算法整理——【贪心算法练习(1)】

上一篇博客算法整理——【贪心算法简述】-CSDN博客,我们介绍了贪心算法的基础知识,现在我们要对此进行进一步练习。 一、跳跃游戏II 例题为45. 跳跃游戏 II - 力扣(LeetCode),给定一个长度为 n 的 0 索引整数数组 nu…...

人脸识别课堂签到系统【PyQt5实现】

人脸识别签到系统 1、运用场景 课堂签到,上班打卡,进出门身份验证。 2、功能类别 人脸录入,打卡签到,声音提醒,打卡信息导出,打包成exe可执行文件 3、技术栈 python3.8,sqlite3,opencv,face_recognition,PyQt5,csv 4、流程图 1、导入库 2、编写UI界面 3、打…...

Linux dig命令常见用法

Linux dig命令常见用法 一、dig安装二、dig用法 DIG命令(Domain Information Groper命令)是常用的域名查询工具,通过此命令,你可以实现域名查询和域名问题的定位,对于网络管理员和在域名系统(DNS)领域工作的小伙伴来说,它是一个非…...

数学建模论文写作文档word

目录 1. 摘要写法1.1 确定题目与方法1.2 编写开头段落1.3 填写问题一1.4 重复步骤3填写其他问题1.5 编写结尾段落1.6 编写关键词 2. 问题重述2.1 问题背景2.2 问题提出 3. 问题分析4. 问题X模型的建立与求解5. 模型的分析5.1 灵敏度分析5.2 误差分析(主要用于预测类…...

嵌入式C语言面试相关知识——CPU、进程和线程相关(相关问题很多,会经常过来更新)

嵌入式C语言面试相关知识——CPU、进程和线程相关 一、博客声明二、自问题目——CPU相关1、什么是中断?如何处理中断?2、解释上下文切换(Context Switch)?3、在嵌入式中如何优化CPU使用? 三、自问题目——进程相关1、什么是进程&a…...

Linux学习看这一篇就够了,超超超牛的Linux基础入门

引言 小伙伴们,不管是学习c还是学习其他语言在我们学的路上都绕不过操作系统,而且,老生常谈的Linux更是每个计算机人的必修,那么我们对Linux的了解可能只是从别人那听到的简单的这个系统很牛,巴拉巴拉的,但…...

el-scrollbar组件使用踩坑记录

一、el-scrollbar和浏览器原生滚动条一起出现 问题描述 el-scrollbar组件主要用于替换浏览器原生导航条。如下图所示,使用el-scrollbar组件后,发现未能成功替换掉浏览器原生导航条,二者同时出现。 引发原因 el-scrollbar的height属性如果…...

Linux计算机结构

1.计算机设计原理 冯诺依曼体系结构 通过该结构得出:中央处理器 2.操作系统整体框架 操作系统是不会让你直接乱使用底层的各种硬件,但为了依旧能够让你使用到该资源则会给你预留一些窗口去让你与其交互(类比银行,直接小窗口交互,…...

应用进程、SurfaceFlinger进程、HWC进程 之间的关系

应用进程、SurfaceFlinger进程、HWC(Hardware Composer)进程在Android系统中扮演着重要的角色,它们之间的关系和通信流程是Android图形显示系统的核心部分。以下是这三者之间关系和通信流程的详细分析: 一、三者之间的关系 应用进…...

66.Python-web框架-Django-免费模板django-datta-able的分页的一种方式

目录 1.方案介绍 1.1实现效果 1.2django.core.paginator Paginator 类: Page 类: EmptyPage 和 PageNotAnInteger 异常: 1.3 templatetags 2.方案步骤 2.1创建一个common app 2.2创建plugins/_pagination.html 2.3 其他app的views.py查询方法 2.4在AIRecords.html里…...

Python编程学习笔记(1)--- 变量和简单数据类型

1、变量 在学习编程语言之前,所接触的第一个程序,绝大多数都是: print("Hello world!") 接下来尝试使用一个变量。在代码中的开头添加一行代码,并对第二行代码进行修改,如下: message "…...

第二证券:资金抱团“高股息”,超三成A股年内创历史新低!

A股商场行情冰火两重天。 “预制菜榜首股”跌破发行价 7月8日,味知香盘中最低跌至19.26元/股,股价跌破发行价,并创前史新低。揭露资料显现,公司是集研发、生产、销售为一体的半成品菜企业,现在具有8大产品系列&#…...

ASAN排查程序中内存问题使用总结

简介 谷歌有一系列Sanitizer工具,可用于排查程序中内存相关的问题。常用的Sanitizer工具包括: Address Sanitizer(ASan):用于检测内存使用错误。Leak Sanitizer(LSan):用于检测内存…...

day01:项目概述,环境搭建

文章目录 软件开发整体介绍软件开发流程角色分工软件环境 外卖平台项目介绍项目介绍定位功能架构 产品原型技术选型 开发环境搭建整体结构:前后端分离开发前后端混合开发缺点前后端分离开发 前端环境搭建Nginx 后端环境搭建熟悉项目结构使用Git进行版本控制数据库环…...

Python爬虫与数据可视化:构建完整的数据采集与分析流程

Python爬虫技术概述 Python爬虫是一种自动化的数据采集工具,它可以模拟浏览器行为,访问网页并提取所需信息。Python爬虫的实现通常涉及以下几个步骤: 发送网页请求:使用requests库向目标网站发送HTTP请求。获取网页内容&#xf…...

Java---包装类与泛型

1.包装类 1.1 包装类 在Java中,由于基本数据类型不是继承Object类,为了在泛型代码中可以支持基本数据类型,Java给每个基本数据类型各自提供了一个包装类。 如下图 除了char和int基本数据类型的包装类型有点特别,其他的都是首字…...

如何优化 PostgreSQL 中对于复杂数学计算的查询?

文章目录 一、理解复杂数学计算的特点二、优化原则(一)索引优化(二)查询重写(三)数据库配置调整(四)使用数据库内置函数的优势 三、具体的优化方案和示例(一)…...

嵌入式 - shell 常用语法简单总结

初步使用#!bin/bashecho "Hello world!"echo# shellvim helloworld.shchmod ux helloworld.sh# 在当前bash运行. helloworld.shsource helloworld.sh# 在子bash中运行,无法修改当前shell的变量./helloworld.shLinux中工具链的配置​ ~/.bashrc用于定义当前…...

PHP+MySQL图书管理系统实战:从环境搭建到功能实现的保姆级教程(附完整源码)

PHPMySQL图书管理系统实战:从零构建企业级应用 1. 环境配置与项目初始化 在开始构建图书管理系统之前,我们需要搭建一个稳定的开发环境。不同于传统的独立安装方式,我将推荐使用Docker容器化方案,这能确保开发环境的一致性并避免&…...

Linux I2C设备驱动避坑指南:以MPU6050为例,详解i2c_transfer与数据读取失败

Linux I2C设备驱动深度调试:MPU6050通信稳定性问题全解析 当你在嵌入式系统中集成MPU6050传感器时,是否遇到过这样的场景:设备树配置正确,驱动代码逻辑清晰,但传感器数据读取却间歇性失败,内核日志中频繁出…...

从HuggingFace下载到本地部署:手把手教你定制自己的BertTokenizer工作流

从HuggingFace下载到本地部署:手把手教你定制自己的BertTokenizer工作流 在自然语言处理项目中,一个高效且灵活的分词器往往是整个流程的基石。BertTokenizer作为HuggingFace生态中的核心组件,其预训练版本能够处理绝大多数英文和中文文本处理…...

从激光雷达到AI服务器:实战解析PCIe高速走线在车载与数据中心的不同设计策略

从激光雷达到AI服务器:实战解析PCIe高速走线在车载与数据中心的不同设计策略 在硬件设计领域,PCIe总线技术已经成为了高速数据传输的事实标准。从自动驾驶汽车的激光雷达到数据中心的AI加速卡,PCIe的身影无处不在。然而,看似相同的…...

手机号查询QQ号:技术解析与实用指南

手机号查询QQ号:技术解析与实用指南 【免费下载链接】phone2qq 项目地址: https://gitcode.com/gh_mirrors/ph/phone2qq 当你更换手机后忘记QQ账号,或需要验证手机号与QQ的绑定关系时,phone2qq项目提供了一种高效解决方案。这是一个基…...

2026年全国优质网站建设公司权威甄选榜,推荐十家公司官网搭建与设计制作服务商能力评估正式发布

据Gartner、QuestMobile联合发布的2026年企业数字化服务报告显示,国内网站建设行业市场规模突破1870亿元,同比增长19.3%;上海作为长三角数字经济核心枢纽,企业官网新建与升级需求同比提升27.8%,其中高端定制建站需求增…...

自适应滤波实战:如何用LMS算法在MATLAB/Simulink中快速搭建一个‘简易版’维纳滤波器?

自适应滤波实战:LMS算法在MATLAB/Simulink中的工程化实现 在信号处理领域,自适应滤波技术因其强大的环境适应能力而备受青睐。想象一下,你正在处理一段被噪声污染的语音信号,或是试图从复杂工业环境中提取有效振动特征——传统固定…...

别再只盯着细胞比例了!用Xenium数据做小鼠肺腺癌空间邻域分析,手把手教你找到真正的肿瘤边界

空间邻域分析:重新定义肿瘤微环境的生物学边界 在单细胞和空间组学研究中,我们常常陷入一个思维定式——过度关注细胞类型的比例变化,却忽略了细胞在三维空间中的精妙排布所蕴含的关键信息。这种比例优先的思维模式,就像试图通过统…...

深度解析BG3ModManager:博德之门3模组加载顺序重置问题的架构设计与解决方案

深度解析BG3ModManager:博德之门3模组加载顺序重置问题的架构设计与解决方案 【免费下载链接】BG3ModManager A mod manager for Baldurs Gate 3. 项目地址: https://gitcode.com/gh_mirrors/bg/BG3ModManager BG3ModManager作为《博德之门3》的核心模组管理…...