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

C++命名空间详细介绍

C++命名空间

    • 命名空间
      • A.What(什么是命名空间)
      • B.Why(为什么要使用命名空间)
      • C.Which(命名空间有哪些类型)
        • 全局命名空间
        • 嵌套命名空间
        • 内联命名空间
        • 匿名命名空间
      • D.内联命名空间
        • What
        • Why(内联命名空间的作用)
      • E.匿名命名空间(未命名的命名空间)
        • What
        • Why(匿名命名空间的作用)
      • F.命名空间的别名
      • G.using namespace std声明

命名空间

A.What(什么是命名空间)

用来避免命名冲突和组织代码的一种机制。它可以将全局作用域划分为不同的区域, 每个区域中可以定义相同名称的变量、函数、类等,而它们之间不会发生命名冲突

B.Why(为什么要使用命名空间)

避免冲突和组织代码

C.Which(命名空间有哪些类型)

全局命名空间

全局作用域:

所有类、函数及命名空间的作用域被称为全局作用域

全局命名空间:

全局作用域范围的空间,全局作用域中定义的成员名字被隐式地添
加到全局命名空间,访问全局命名空间的成员(::member_name)

嵌套命名空间

命名空间A中嵌套了命名空间B

namespace A
{namespace B{class Student{...}}
}

访问方式:

A::B::Student stuObj;
内联命名空间

被关键字inline修饰的命名空间,内联命名空间的成员可以直接被外层命名空间访问

namespace A
{inline namespace Animal_Namespace{string strPandas = "Pandas";string strDog = "Dog";}void display(){std::cout<<strPandas<<std::endl; //可以直接访问}
}
匿名命名空间

没有名字的命名空间

namespace
{double dHumanAveAge = 78.2;
}

D.内联命名空间

What

被关键字inline修饰的命名空间,内联命名空间的成员可以直接被外层命名空间访问

namespace A
{inline namespace Animal_Namespace{string strPandas = "Pandas";string strDog = "Dog";}void display(){std::cout<<strPandas<<std::endl; //可以直接访问}
}
Why(内联命名空间的作用)
  • 向后兼容:

    使用内联命名空间,可以在现有的命名空间中添加新的函数、类或变 量而无需修改原始代码。这样,在库的更新版本中,用户可以继续使用原始命名空 间,并享受到新功能的好处,而无需修改其它代码

  • 细粒度命名空间控制:

    内联命名空间允许将部分代码放入特定的命名空间中,从而实现更细粒度的命名空间控制,如下例子所示:

    namespace A
    {inline namespace Spring{string strWhere = "Shengzhen";long lYear = 1980;}inline namespace Winter{string strWhere = "Dongbei";long lYear = 1998;}void display(){std::cout<<Spring::strWhere<<"..."<<Spring::lYear<<std::endl;std::cout<<Winter::strWhere<<"..."<<Winter::lYear<<std::endl;}
    }
    
  • 代码组织化和模块化:

    使用内联命名空间可以将相关的功能组织在一起,形成模块化的代码结构

  • 名称隐藏:

    内联命名空间中的标识符不会污染外部命名空间,这意味着可以在内联命名空间中定义与外部命名空间中相同名称的标识符,而不会导致冲突

E.匿名命名空间(未命名的命名空间)

What

没有名字的命名空间被称为匿名命名空间

namespace 
{double dHumanAveAge = 78.0;
}

注意:未命名的命名空间中的成员具有静态声明的周期,但它仅在本文件中有效,作用域不会跨文件存在

Why(匿名命名空间的作用)
  • 取代静态声明:未命名的命名空间中声明变量取代文件中的静态声明
  • 隐藏细节:匿名命名空间中的成员仅在本文件中可见,这样可以隐藏一些实现细节,防止其它文件直接访问和修改
  • 提供内部实现:匿名命名空间可以用来定义一些只在当前文件夹中使用的辅助函数、变量或类,可以将这些实体与其它文件的接口分离,提高代码的可维护性

F.命名空间的别名

namespace AnimalNamespace {...}
namespace AniSpace = AnimalNamespace; //接下来的程序就可以使用AniSpace替代AnimalNamespace

G.using namespace std声明

using std::cout;
cout<<"Hello world"<<std::endl;
using std::endl;
cout<<"Oh, My gold!"<<endl; //上述using代码将cout和endl注入到了当前作用域中

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • iOS多target时怎么对InfoPlist进行国际化
  • 流程图编辑框架LogicFlow-vue-ts和js
  • spark基于Spark的对招聘信息的分析与设计-计算机毕业设计源码50716
  • 好玩的珠玑妙算-加作弊带概率空间+日志存储240705mindMaster
  • C# IOC容器、依赖注入和控制反转
  • 统信UOS桌面操作系统上删除系统升级后GRUB中的回滚条目与备份
  • kotlin flow collect collectLatest 区别
  • gitee代码初次上传步骤
  • JavaScript(7)——数组
  • 界面控件DevExpress JS ASP.NET Core v24.1 - 全新的分割器组件
  • 网页版五子棋双人小游戏测试报告
  • 【Mac】Charles for Mac(HTTP协议抓包工具)及同类型软件介绍
  • 一、Python 日志系统设计之不同级别的系统日志
  • 科技创新引领水利行业升级:深入分析智慧水利解决方案的核心价值,展望其在未来水资源管理中的重要地位与作用
  • Ubuntu 20版本安装Redis教程,以及登陆
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 0x05 Python数据分析,Anaconda八斩刀
  • 2017前端实习生面试总结
  • Create React App 使用
  • create-react-app项目添加less配置
  • Java 多线程编程之:notify 和 wait 用法
  • Java知识点总结(JavaIO-打印流)
  • mysql 5.6 原生Online DDL解析
  • nodejs实现webservice问题总结
  • 编写高质量JavaScript代码之并发
  • 关于List、List?、ListObject的区别
  • 今年的LC3大会没了?
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 一文看透浏览器架构
  • 正则与JS中的正则
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​Redis 实现计数器和限速器的
  • ‌JavaScript 数据类型转换
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • $L^p$ 调和函数恒为零
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (1)Hilt的基本概念和使用
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (day 12)JavaScript学习笔记(数组3)
  • (SERIES12)DM性能优化
  • (SpringBoot)第七章:SpringBoot日志文件
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (函数)颠倒字符串顺序(C语言)
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .Net 执行Linux下多行shell命令方法
  • .NET中两种OCR方式对比
  • ;号自动换行
  • [ C++ ] STL priority_queue(优先级队列)使用及其底层模拟实现,容器适配器,deque(双端队列)原理了解
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...