命名空间(namespace)及其应用技巧

C++ 命名空间及其应用技巧

文章目录

  • C++ 命名空间及其应用技巧
    • 引言
    • 代码案例一:不同命名空间的变量和自定义类型
    • 代码案例二:命名空间的嵌套和using的使用
    • 代码案例三:不连续的同名命名空间
    • 代码案例四:命名空间和局部、全局变量的优先级
    • 总结

引言

在C++中,命名空间是一种有效的组织代码和解决命名冲突的方式。通过合理使用命名空间,我们可以更清晰地组织代码结构,使其更易于维护和扩展。本篇博客将通过一些具体的代码案例,介绍C++中命名空间的基本概念、嵌套应用、使用技巧以及与局部、全局变量的交互关系。


代码案例一:不同命名空间的变量和自定义类型

在这个案例中,我们演示了如何在不同命名空间中定义变量和自定义类型,并展示了它们的使用方法。

// 代码案例一
#include <iostream>using namespace std;namespace aa
{int n = 10;class TreeNode{public:TreeNode* left = nullptr;TreeNode* right = nullptr;int val = 8;};
}namespace bb
{int n = 20;class TreeNode{public:TreeNode* left = nullptr;TreeNode* right = nullptr;int val = 13;};
}void test1()
{// 获取不同命名空间中的内置类型变量的值cout << aa::n << endl;cout << bb::n << endl;// 使用、获取自定义类型aa::TreeNode root_a;bb::TreeNode root_b;if (root_a.val == root_b.val){cout << "root_a.val == root_b.val" << endl;}else{cout << "a.val = " << root_a.val << "\t" << "b.val = " << root_b.val << endl;}
}// 主函数中调用 test1()
int main()
{test1();return 0;
}

运行结果:

在这里插入图片描述

在这个案例中,我们定义了两个命名空间 aa 和 bb ,分别包含一个整型变量n和一个自定义类型 TreeNode 。test1 函数展示了如何在主函数中使用这些命名空间中的变量和自定义类型。

代码案例二:命名空间的嵌套和using的使用

这个案例演示了命名空间的嵌套和使用using关键字来简化代码的方法。

// 代码案例二
#include <iostream>using namespace std;namespace zoufeng
{namespace queue{void Push(const int x){cout << "queue::Push -> " << x << endl;}}namespace deque{void Push(const int x){cout << "deque::Push -> " << x << endl;}}
}void test2_1()
{int val = 65;zoufeng::deque::Push(val);zoufeng::queue::Push(val);
}void test2_2()
{using namespace zoufeng::deque; // 使用using展开指定命名空间Push(10);
}// 主函数中调用 test2_1() 和 test2_2()
int main()
{test2_1();test2_2();return 0;
}

运行结果:

在这里插入图片描述

在这个案例中,我们演示了如何嵌套命名空间以及如何使用using关键字来简化代码。test2_1函数展示了命名空间的嵌套调用,而 test2_2 函数则展示了如何使用using关键字展开指定的命名空间

代码案例三:不连续的同名命名空间

这个案例展示了在不同文件中定义的同名命名空间的使用方法。

// xzt.hpp 内容如下
#pragma oncenamespace xzt
{int key_n = 550;
}// 代码案例三
#include "xzt.hpp"
#include <iostream>using namespace std;namespace xzt
{void Print_val(const int x){cout << "val = " << x << endl;}
}void test3()
{xzt::Print_val(xzt::key_n);
}// 主函数中调用 test3()
int main()
{test3();return 0;
}

运行结果:

在这里插入图片描述

在这个案例中,我们引入了外部文件 xzt.hpp,其中定义了一个名为 xzt 的命名空间。test3 函数演示了如何在不同文件中使用同名的命名空间,同时验证了同一文件非连续定义或不同文件中的同名空间会自动合并。

代码案例四:命名空间和局部、全局变量的优先级

最后一个案例介绍了命名空间中的变量与局部、全局变量的优先级关系。

// 代码案例四
#include <iostream>using namespace std;namespace A 
{int a = 100;namespace B {int a = 20;}
}int a = 200;void test4()
{cout << "A::a =" << A::a << endl;cout << "A::B::a =" << A::B::a << endl;cout << "a =" << a << endl;cout << "::a =" << ::a << endl;using namespace A;//cout << "a =" << a << endl; // 编译错误,引起命名空间冲突cout << "::a =" << ::a << endl;int a = 30;cout << "a =" << a << endl;cout << "::a =" << ::a << endl;using namespace A;cout << "a =" << a << endl; // 当有同名局部变量时,优先使用局部变量cout << "::a =" << ::a << endl;
}// 主函数中调用 test4()
int main()
{test4();return 0;
}

运行结果:

在这里插入图片描述

在这个案例中,我们演示了命名空间中的变量与全局、局部变量的优先级关系。通过这个案例,我们可以更好地理解在不同作用域中同名变量的优先级规则。

​ 通过以上几个案例,我们深入了解了C++中命名空间的基本概念、使用方法以及与变量交互的关系。希望通过这些案例的详细讲解,读者能够更清晰地理解和应用命名空间的相关概念。在C++编程中,良好的命名空间设计能够提高代码的可读性、可维护性,并有效避免命名冲突的问题。


总结

​ 本篇博客通过多个实例深入探讨了C++中命名空间的应用,包括不同命名空间的变量和自定义类型的使用、命名空间的嵌套及using的使用、不连续同名命名空间的处理,以及命名空间与局部、全局变量的优先级关系。希望这些示例能够帮助读者更好地理解和运用命名空间,提升代码的质量和可维护性。

​ 在实际项目中,充分利用命名空间将代码模块化、结构化,能够更好地协作开发和降低代码维护成本。同时,要谨慎使用全局变量,以避免不必要的命名冲突,保持代码的一致性和可靠性。希望读者能够通过本文对C++命名空间的深入理解,更加游刃有余地进行编程工作。

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

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

相关文章

使用Ettus USRP X440对雷达和EW系统进行原型验证

概览 无论是保障己方平台的生存能力&#xff0c;还是扰乱敌方频谱使用&#xff0c;以电磁(EM)频谱为主导都是任务成功的主要因素。电磁频谱操作(Electromagnetic Spectrum Operation, EMSO)需要使用战术系统来监测敌方的频谱活动、定位其发射器并帮助己方制定行动计划。软件无…

大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置

上一篇&#xff1a; 大数据 - Spark系列《一》- 从Hadoop到Spark&#xff1a;大数据计算引擎的演进-CSDN博客 目录 1. &#x1f959;Idea中配置Live Templates来快速生成代码片段 2. &#x1f959;Idea中配置文件模板自定义初始代码 3.&#x1f959;设置spark-submit提交程…

【stm32】hal库学习笔记-FSMC连接TFT_LCD

【stm32】hal库学习笔记-FSMC连接TFT LCD 触摸屏结构与原理 LCD模块接口原理图 LCD 接口连接在 FSMC 总线上面&#xff0c;图中的 T_MISO/T_MOSI/T_PEN/T_SCK/T_CS 连接在 MCU 的 PB2/PF11/PB1/PB0/PC13 上&#xff0c;这些信号用来实现对液晶触摸屏的控制&#xff08;支持电阻…

AI 数字人从制作到变现

最近AI很火&#xff0c;无意中发现一个宝藏专栏《AI数字人从制作到变现》&#xff0c;原价599&#xff0c;现在推广阶段&#xff0c;只需要10元&#xff0c;专栏持续更新中&#xff0c;会有更多的知识后续分享。如有兴趣可以用微信扫描左侧海报二维码&#xff0c;下面我将介绍专…

第14章_视图

第14章_视图 1.常见的数据库对象 对象描述表(TABLE)表是存储数据的逻辑单元&#xff0c;以行和列的形式存在&#xff0c;列就是字段&#xff0c;行就是记录数据字典就是系统表&#xff0c;存放数据库相关信息的表。系统表的数据通常由数据库系统维护&#xff0c; 程序员通常不…

ES6-let

一、基本语法 ES6 中的 let 关键字用于声明变量&#xff0c;并且具有块级作用域。 - 语法&#xff1a;let 标识符;let 标识符初始值; - 规则&#xff1a;1.不能重复声明let不允许在相同作用域内重复声明同一个变量2.不存在变量提升在同一作用域内&#xff0c;必须先声明才能试…

【项目实战】谷粒学院项目回顾

本文作者&#xff1a; slience_me 谷粒学院 谷粒学院项目致力于打造一个B2C模式的职业技能在线教育系统平台&#xff0c;采用现阶段流行技术来实现&#xff0c;采用前后端分离编写。 GitHub 地址 项目学习资源 项目文档 slience_me的博客 接口文档 谷粒学院完整代码: https…

使用ChatGPT学习大象机器人六轴协作机械臂mechArm

引言 我是一名机器人方向的大学生&#xff0c;近期学校安排自主做一个机器人方面相关的项目。学校给我们提供了一个小型的六轴机械臂&#xff0c;mechArm 270M5Stack&#xff0c;我打算使用ChatGPT让它来辅助我学习如何使用这个机械臂并且做一个demo。 本篇文章将记录我是如何使…

模型单体化真的有那么重要吗?

模型单体化是三维建模绕不开的一关&#xff0c;日常想要实现模型单体化可以使用一些软件加以辅助。 比如【云端地球&#xff08;Das Earth&#xff09;】 这是一款集中于实景三维建模与展示、建模数据分析、个性化服务选择于一体的云平台&#xff1b;在线建模&#xff0c;具有…

MySQL进阶之锁(表级锁,元数据锁,意向锁)

表级锁 介绍 表级锁&#xff0c;每次操作锁住整张表。锁定粒度大&#xff0c;发生锁冲突的概率最高&#xff0c;并发度最低。应用在MyISAM、 InnoDB、BDB等存储引擎中。 对于表级锁&#xff0c;主要分为以下三类&#xff1a; 表锁 元数据锁&#xff08;meta data lock&…

微信小程序(二十九)交互提示-界面加载框和提示框

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.showLoading加载框示范 2.showToast提示框示范 源码&#xff1a; index.wxml <!-- 列表渲染基础写法&#xff0c;不明白的看上一篇 --> <view class"students"><view class"it…

浅谈WPF之UniformGrid和ItemsControl

在日常开发中&#xff0c;有些布局非常具有规律性&#xff0c;比如相同的列宽&#xff0c;行高&#xff0c;均匀的排列等&#xff0c;为了简化开发&#xff0c;WPF提供了UniformGrid布局和ItemsControl容器&#xff0c;本文以一个简单的小例子&#xff0c;简述&#xff0c;如何…

RabbitMQ控制台的基本使用

启动RabbitMQ后&#xff0c;浏览器 http://localhost:15672 打开RabbitMQ的控制台页面后&#xff0c;登录默认账户guest。 一. 添加队列 控制台选择队列&#xff0c;然后选择添加队列&#xff0c;队列类型默认经典类型&#xff0c;然后输入队列名称&#xff0c;最后添加队列。…

Kore.ai获10亿元融资,提供定制化类ChatGPT助手

1月31日&#xff0c;生成式AI和企业对话平台Kore.ai在官网宣布&#xff0c;获得1.5 亿美元&#xff08;约10.7亿元&#xff09;融资。本次由FTV Capital 领投&#xff0c;英伟达等跟投。 Kore.ai主要提供银行、医疗、零售、营销、人力资源等多种领域的&#xff0c;定制化类Cha…

Leetcode的AC指南 —— 栈与队列 :1047.删除字符串中的所有相邻重复项

摘要&#xff1a; **Leetcode的AC指南 —— 栈与队列 &#xff1a;1047.删除字符串中的所有相邻重复项 **。题目介绍&#xff1a;给出由小写字母组成的字符串 S&#xff0c;重复项删除操作会选择两个相邻且相同的字母&#xff0c;并删除它们。 在 S 上反复执行重复项删除操作&a…

RHCE DNS域名解析服务器

目录 1. 正向解析 1.1 安装必要软件 1.2 配置静态ip 1.3 DNS配置 1.4 测试 2. 反向解析 2.1 关闭安全软件&#xff0c;安装必要软件 2.2 配置静态ip 2.3 DNS配置 2.4 测试 1. 正向解析 1.1 安装必要软件 1.2 配置静态ip 服务器配置 nmcli c modify ens32 ipv4.method man…

【乳腺肿瘤诊断分类及预测】基于PNN概率神经网络

课题名称&#xff1a;基于PNN的乳腺肿瘤诊断分类及预测 版本日期&#xff1a;2023-06-15 运行方式: 直接运行PNN0501.m 文件即可 代码获取方式&#xff1a;私信博主或QQ&#xff1a;491052175 模型描述&#xff1a; 威斯康辛大学医学院经过多年的收集和整理&#xff0c;建…

mysql 锁知识汇总

目录 一、锁1.1 什么是锁&#xff1f;1.2 全局锁1.2.1 定义1.2.2 应用场景1.2.3 会出现的问题1.2.4 解决方法 1.3 表级锁1.3.1 表锁1.3.2 元数据锁&#xff08;MDL&#xff09;1.3.3 意向锁1.3.4 AUTO-INC锁 1.4 行级锁1.4.1 记录锁(Record Lock)1.4.2 间隙锁(Gap Lock)1.4.3 N…

国家组织考试并唯一认可的IT类资格证书:计算机技术与软件专业技术资格(水平)考试证书

目录 一、这么多IT类证书为什么只有软考证书权威 1.根据身份选择并考证 2.根据需要选择考试 3.要根据证书的出身选择考试 二、软考的考试内容 三、证书样张 计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff0c;简称“软考”&#xff0c;是人力资源…

HBase 数据导入导出

HBase 数据导入导出 1. 使用 Docker 部署 HBase2. HBase 命令查找3. 命令行操作 HBase3.1 HBase shell 命令3.2 查看命名空间3.3 查看命名空间下的表3.4 新建命名空间3.5 查看具体表结构3.6 创建表 4. HBase 数据导出、导入4.1 导出 HBase 中的某个表数据4.2 导入 HBase 中的某…