C++:命名空间(namespace)详细介绍与案例
命名空间(namespace)是C++中的一个重要概念,用于组织代码和避免名称冲突。它们允许程序员将标识符(如变量、函数、类等)组织在一起,以便在较大的程序中防止命名冲突。
1. 基本概念
命名空间的基本定义方式如下:
namespace MyNamespace {int myVariable;void myFunction() {// 函数实现}
}
在上面的例子中,MyNamespace
是命名空间的名称,myVariable
和 myFunction
是该命名空间中的标识符。
2. 使用命名空间
要访问命名空间中的标识符,可以使用作用域解析运算符 ::
:
int main() {MyNamespace::myVariable = 10; // 访问命名空间中的变量MyNamespace::myFunction(); // 调用命名空间中的函数return 0;
}
3. using
指令
为了简化访问命名空间中的标识符,可以使用 using
指令:
using namespace MyNamespace;int main() {myVariable = 10; // 直接访问,无需前缀myFunction(); // 直接调用return 0;
}
4. 多层命名空间
命名空间可以是多层嵌套的。例如:
namespace OuterNamespace {namespace InnerNamespace {int innerVariable;void innerFunction() {// 函数实现}}
}
要访问嵌套的标识符,可以使用多个 ::
运算符:
int main() {OuterNamespace::InnerNamespace::innerVariable = 20;OuterNamespace::InnerNamespace::innerFunction();return 0;
}
5. 多个命名空间
在一个头文件中可以定义多个命名空间:
// my_header.h
namespace NamespaceA {void functionA() {// 实现}
}namespace NamespaceB {void functionB() {// 实现}
}
在使用时,依然需要通过作用域解析运算符来访问这些命名空间中的标识符,或者使用 using
指令来引入:
#include "my_header.h"int main() {NamespaceA::functionA(); // 使用命名空间 ANamespaceB::functionB(); // 使用命名空间 Busing namespace NamespaceA; // 使用 NamespaceAfunctionA(); // 可以直接调用return 0;
}
6. 避免命名冲突
命名空间的主要目的是避免命名冲突。例如,两个不同库可能都定义了一个名为 function()
的函数:
namespace LibraryA {void function() {// 实现}
}namespace LibraryB {void function() {// 实现}
}// 使用时可以指定命名空间
LibraryA::function();
LibraryB::function();
7. 命名空间别名
可以使用 namespace
关键字创建命名空间的别名,以简化代码:
namespace A = NamespaceA;int main() {A::functionA(); // 使用别名访问return 0;
}
8. 匿名命名空间
如果不希望某个命名空间中的内容被外部访问,可以使用匿名命名空间:
namespace {void internalFunction() {// 只能在此文件中访问}
}
9. 小结
- 组织代码:命名空间用于组织和分隔代码,以便在大型程序中保持结构性和清晰性。
- 避免冲突:命名空间帮助避免不同库和模块中的命名冲突,确保标识符的唯一性。
- 层次结构:支持多层命名空间,有助于进一步组织代码。
- 简化访问:可以使用
using
指令来简化访问命名空间中的标识符。 - 命名空间别名:使用别名可以提高可读性,减少冗长的代码。
- 匿名命名空间:提供一种方式来限制标识符的作用域,仅在定义文件中可见。
通过这些机制,C++中的命名空间提供了强大的工具来组织和管理代码。
相关文章:
C++:命名空间(namespace)详细介绍与案例
命名空间(namespace)是C中的一个重要概念,用于组织代码和避免名称冲突。它们允许程序员将标识符(如变量、函数、类等)组织在一起,以便在较大的程序中防止命名冲突。 1. 基本概念 命名空间的基本定义方式如…...

专题十一_递归_回溯_剪枝_综合练习_算法专题详细总结
目录 1. 找出所有⼦集的异或总和再求和(easy) 解析: 方法一: 解法二: 总结: 2. 全排列 Ⅱ(medium) 解析: 解法一:只关心“不合法”的分支 解法二&…...
java中Runnable接口是什么?基本概念、工作原理、优点、`Runnable`与`Thread`的对比、与`Callable`接口的对比、实际场景
Runnable接口是Java提供的一种用于实现多线程的接口,通常用来定义任务的具体逻辑。与Thread类不同,Runnable接口只提供一种抽象方法run(),没有任何与线程的生命周期、管理相关的功能。它的主要作用是与Thread类或线程池(如Executo…...

Mybatis Plus连接使用ClickHouse也如此简单
通过阅读列式数据库ClickHouse官网,不难看出它有支持JDBC规范的驱动jar包,可以直接集成到Object Relational Mapping框架等,下面我用SpringBootMybatisPlus环境连接ClickHouse来演示一下 集成步骤 1.Maven引入ClickHouse提供的JDBC依赖 <…...

什么社交平台可以找到搭子?分享多款找搭子必备的人气软件
在这个丰富多彩的世界里,我们常常渴望有一个志同道合的搭子,一起分享生活的点滴,共同探索未知的领域。无论是追寻美食的舌尖之旅,还是踏上充满惊喜的旅途;无论是在健身房挥洒汗水…… 找到一个合适的搭子,都…...

STM32 RTC实时时钟 F407 寄存器
RTC介绍 STM32F1: RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。 即在F1系列,RTC的日历部分只有一个32位的寄存器 该寄存器直接存放 时间戳 的值,即࿱…...
矩阵等价、向量组等价、线性方程组同解与公共解的关系
矩阵等价 矩阵 A 、 B 等价 ⇔ 两矩阵秩相等 R ( A ) R ( B ) ⇔ 每个矩阵的行秩等于列秩,两个矩阵的行秩与列秩分别相等 ⇔ 若行满秩则列向量组等价 ⇔ 若列满秩则行向量组等价 \begin{align} 矩阵A、B等价\\ &\Leftrightarrow 两矩阵秩相等R(A)R(B)\\ &\…...

[Linux] Linux 进程程序替换
标题:[Linux] Linux 进程程序替换 个人主页水墨不写bug (图片来源于网络) 目录 O、前言 一、进程程序替换的直观现象(什么是进程程序替换?) 二、进程程序替换的原理 三、进程程序替换的函数(…...

【Linux系统编程】第三十一弹---深入理解静态库:从零开始制作与高效使用的完全指南
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、静态库 1.1、怎么做静态库 1.2、怎么使用静态库 1、静态库 1.1、怎么做静态库 在Linux环境下,通常使用GCC&am…...

FFmpeg 简介及其下载安装步骤
目录 一、FFmpeg 简介 二、FFmpeg 安装步骤 2.1 打开官网 2.2 选择FFmpeg系统版本 2.3 下载FFmpeg压缩包 2.4 将下载好的压缩包进行解压 2.5 设置环境变量 2.5.1 在搜索栏中搜索【环境变量】,然后单击将其打开 2.5.2 找到系统变量中的【Path】,点…...

使用CSS+SVG实现加载动画
使用CSSSVG实现加载动画 效果展示 CSS知识点 SVG元素使用SVG相关CSS属性运用 整体页面布局 <section><div class"box"><div class"loader"><svg><circle cx"40" cy"40" r"40"></circl…...
物联网(IoT)的未来发展:智能互联时代的到来
物联网(IoT)的未来发展:智能互联时代的到来 物联网(IoT)正在迅速改变我们与世界互动的方式。无论是智能家居、智慧城市,还是工业自动化,物联网技术通过设备互联、数据采集和智能控制࿰…...

斯坦福 CS229 I 机器学习 I 构建大型语言模型 (LLMs)
1. Pretraining -> GPT3 1.1. Task & loss 1.1.1. 训练 LLMs 时的关键点 对于 LLMs 的训练来说,Architecture(架构)、Training algorithm/loss(训练算法/损失函数)、Data(数据)、Evalu…...

Java->排序
目录 一、排序 1.概念 2.常见的排序算法 二、常见排序算法的实现 1.插入排序 1.1直接插入排序 1.2希尔排序(缩小增量法) 1.3直接插入排序和希尔排序的耗时比较 2.选择排序 2.1直接选择排序 2.2堆排序 2.3直接选择排序与堆排序的耗时比较 3.交换排序 3.1冒泡排序…...
linux 大小写转换
var"TM_card_INFo" # 把变量中的第一个字符换成大写 echo ${var^} # 把变量中的所有小写字母,全部替换为大写 echo ${var^^} # 把变量中的第一个字符换成小写 echo ${var,} # 把变量中的所有大写字母,全部替换为小写 echo ${var,,} 参考…...

Linux——传输层协议
目录 一再谈端口号 1端口号范围划分 2两个问题 3理解进程与端口号的关系 二UDP协议 1格式 2特点 3进一步理解 3.1关于UDP报头 3.2关于报文 4基于UDP的应用层协议 三TCP协议 1格式 2TCP基本通信 2.1关于可靠性 2.2TCP通信模式 3超时重传 4连接管理 4.1建立…...
centos系列,yum部署jenkins2.479.1,2024年长期支持版本
centos系列,yum部署jenkins2.479.1,2024年长期支持版本 0、介绍 注意:jenkins建议安装LTS长期支持版本,而不是安装每周更新版本,jenkins安装指定版本 openjdk官网下载 Index of /jenkins/redhat-stable/ | 清华大学开…...

正则表达式-“三剑客”(grep、sed、awk)
1.3正则表达式 正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串,将匹配的子串替换或者从某个串中取出符号某个条件的子串等,在linux中代表自定义的模式模版,linux工具可以用正则表达式过滤文本。Linux…...

数智时代的新航向:The Open Group 2024生态系统架构·可持续发展年度大会邀您共筑AI数字新时代
在全球可持续发展和数字化转型双重驱动下,企业正面临着前所未有的挑战与机遇。如何在激烈的市场竞争中,实现业务增长的同时,履行社会责任,达成可持续发展的目标?The Open Group 2024生态系统架构可持续发展年度大会将于…...
TensorFlow 的核心概念
TensorFlow 是一个开源的机器学习框架,由 Google 开发和维护。它提供了一个强大的工具集,用于构建和训练各种机器学习模型。 TensorFlow 的核心概念是计算图(Computational Graph)。计算图由节点(Nodes)和…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...

莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...

uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...

软件工程 期末复习
瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...
Vue3中的computer和watch
computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...
使用python进行图像处理—图像滤波(5)
图像滤波是图像处理中最基本和最重要的操作之一。它的目的是在空间域上修改图像的像素值,以达到平滑(去噪)、锐化、边缘检测等效果。滤波通常通过卷积操作实现。 5.1卷积(Convolution)原理 卷积是滤波的核心。它是一种数学运算,…...