当前位置: 首页 > 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 中对于复杂数学计算的查询?

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

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)&#xff0…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...

《Offer来了:Java面试核心知识点精讲》大纲

文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...

路由基础-路由表

本篇将会向读者介绍路由的基本概念。 前言 在一个典型的数据通信网络中,往往存在多个不同的IP网段,数据在不同的IP网段之间交互是需要借助三层设备的,这些设备具备路由能力,能够实现数据的跨网段转发。 路由是数据通信网络中最基…...