命名空间 (namespace) 可以帮助我们区分不同库中相同名称的函数, 类, 变量等. 使用了命名空间即定义了上下文. 命名空间就是定义了一个范围.

命名空间

为了解决 C++ 标准库中的标识符与程序中的全局标识符之间以及不同库中的所有标识符之间的命名冲突. 标准 C++ 库的所有标识符都定义在一个名为 std 的命名空间中. 在程序中用到 C++ 标准库时, 使用 std 作为限定.

命名空间的作用

命名空间是 ANSI C++ 引入可以由用户命名的作用域, 用来处理程序中常见的同名冲突. 在 C++ 程序中, 有大量的变量, 函数和类名. 如果他们都存在于同一个全局命名空间中, 会导致很多冲突.

  • 自定义函数与标准库函数重名
  • 程序中使用的名字与第三方库中名称相同
  • 项目不同模块中名字的冲突

命名空间的机制, 对于声明于其中的名称都进行了本地化:

  • 相同的名称可以在不同的上下文中使用, 而不会引起名称的冲突
  • C++ 中的标准库被定义到 std 命名空间中, 减少了与用户自定义名称的冲突
  • 在自己的程序中创建自己的命名空间, 避免本地化名称与外界冲突

自定义命名空间

  • 可以放函数,变量,结构体,类等等
  • 必须定义在全局作用域下
  • 命名空间可以嵌套命名空间
  • 命名空间是开放的,可以随时往原先的里添加内容
  • 匿名命名空间,当写了无名命名空间,相当于写了static全局变量,只能在当前编译单元使用,当然定义在了.cpp文件中就是只能在当前文件中使用
  • 命名空间可以起别名
    namespace veryShortName = veryLongName

使用命名空间成员的方法

一般方法: 引用命名空间成员时, 用命名空间名对名命名空间成员进行限定, 以区别同名标识符. (命名空间::命名空间成员名)

简化使用命名空间成员的机制:

  • 使用命名空间别名: namespace TV = Television; // TV等同Television
  • 使用格式: using 命名空间成员名 using ns1::Student; // Student等同ns1::Student
  • 使用: using namespace 命名空间名

注意

Using声明和编译指令都要注意二义性

原文链接

https://www.jb51.net/article/221666.htm

C/C++中命名空间(namespace)详解及其作用介绍相关推荐

  1. c++ memset 语言_C/C++ 中memset() 函数详解及其作用介绍

    memset 函数是内存赋值函数,用来给某一块内存空间进行赋值的: 包含在头文件中,可以用它对一片内存空间逐字节进行初始化: 原型为 : void *memset(void *s, int v, si ...

  2. 【C++】命名空间namespace详解

    一.命名空间的引入 C++中,名称(name)可以是符号常量.变量.宏.函数.结构体.枚举.类和对象等等.而在大型工程中,难免会有重名的现象,命名空间namespace,就是C++引入的一种解决名称冲 ...

  3. 【024】C++对C的扩展之命名空间namespace详解

    C++对C的扩展 引言 一.面向对象编程概述 1.1.面向过程 1.2.面向对象 二.作用域运算符 :: (双冒号) 三.命名空间 namespace 3.1.命名空间使用语法 3.2.using声明 ...

  4. 【C++】命名空间(namespace)详解

     一.为什么使用命名空间 考虑一种情况,当我们有两个同名的人,Zara,在同一个班里.当我们需要对它们进行区分我们必须使用一些额外的信息和它们的名字,比如这个区域,如果它们生活在不同的区域或者它们的母 ...

  5. django url 中的namespace详解

    [引子] django是一个比较全能的web框架,比如它实现了自己的orm模型来对接不同的数据库.并提供了方便的数据接口:django牛逼的地方 还有许多,如他实现了自己的模板语言,这样我们就能方便的 ...

  6. WebService中的WSDL详解

    WebService中的WSDL详解 有人在WebService开发的时候,特别是和第三方有接口的时候,走的是SOAP协议,然后用户(或后台)给你一个WSDL文件(或网址),说按照上面的进行适配, 这 ...

  7. iOS中ImageIO框架详解与应用分析

    2019独角兽企业重金招聘Python工程师标准>>> iOS中ImageIO框架详解与应用分析 一.引言 ImageIO框架提供了读取与写入图片数据的基本方法,使用它可以直接获取到 ...

  8. GAZEBO 中 sdf文件详解

    转载自:https://blog.csdn.net/weixin_44900096/article/details/103017522 GAZEBO 中 sdf文件详解 木木木一 2019-11-11 ...

  9. Unity中AB包详解(超详细,特性,打包,加载,管理器)

    Unity中的AssetBundle详解 AssetBundle的概念 AssetBundle又称AB包,是Unity提供的一种用于存储资源的资源压缩包. Unity中的AssetBundle系统是对 ...

最新文章

  1. 【大神公开课】旷视研究院院长-孙剑博士:视觉计算前沿进展
  2. this.blur()
  3. linux 设备事件管理服务 systemd-udevd.service 简介
  4. 我用ASP.NET缓存之OutputCache
  5. MATLAB实战系列(三十四)-MATLAB基于PCA-LDA模糊神经网络的人脸识别
  6. LOD优化策略-通篇
  7. Centos7.5 安装 mysql 5.7 ( 卸载自带 MariaDB)(实测)
  8. 史上最全的人工智能知识图谱
  9. 初学者想自学单片机需要买什么呢?
  10. python装饰图解_Python装饰器(Decorate)使用图解
  11. 播布客学习视频_C学习笔记_simple
  12. 计算历史区间的收益率,用前复权还是后复权?
  13. MySql8.0安装教程,细致教学
  14. 设计师如何吸引用户注意力?
  15. RStudio用不了怎么办?
  16. 报头压缩-ROHC压缩系统
  17. 计算机表格分类,什么是报表?它的类型有几种?
  18. 减少使用非 SDK 接口,提升系统稳定性
  19. codeforces竞赛1169题解
  20. 史上最全Linux命令总结

热门文章

  1. EXCUTE方法executeUpdate
  2. java生成MD5校验码(文件/字符串)
  3. ElasticSearch7.3学习(二十七)----聚合概念(bucket和metric)及其示例
  4. [图形学] 射线和线段之间的最小距离
  5. 2017java考证_2017年Java认证考试试题
  6. 16 张图详解,淘宝十年架构演进过程
  7. 电脑变小,技术员解决电脑屏幕变小了怎么办 【解决方法】 的教程介绍_
  8. 关于path变量配置出现LRE的问题
  9. Linux高级指令(二)
  10. 如何解决Golang项目采用go mod时出现i/o timeout的问题