译者注:可能很多程序员对C++已经非常熟悉,但是对命名空间经常使用到的地方还不是很明白,这篇文章就针对命名空间这一块做了一个叙述。

命名空间在1995年被引入到 c++ 标准中,通常是这样定义的:

命名空间定义了新的作用域。它们提供了一种避免名称冲突的方法。

c++ 中的命名空间通常用于避免命名冲突。尽管命名空间在最近的 c++ 代码中广泛使用,但大多数较旧代码都不使用此工具。

基于对众多C++项目源码的探索与研究,总结出了在这些项目中使用命名空间的一些常见原因。

避免名称冲突

如前所述,这是在C++中使用命名空间最常见的原因,在这种情况下,它们的使用只是对编译器有效。无法为开发人员在代码可读性和维护性方面带来什么价值。

模块化应用程序

命名空间采取 “Namespace-by-feature ”的方法使代码模块化。”Namespace-by-feature” 通过命名空间来反映功能集。它将具有相互关联的项归类在同一个命名空间。这会形成具有高内聚低耦合(译者注:高内聚是指一个软件模块是由相关性很强的代码组成,只负责一项任务。耦合是一个软件结构内不同模块之间互连程度的度量)、模块性很强的命名空间。

Boost是按功能分组的最佳示例, 它包含数以千计的命名空间, 每一个都用于对特定功能进行分组。

匿名命名空间

匿名的命名空间可避免产生全局静态变量。您创建的 “匿名” 命名空间只能在创建它的文件中访问。

解决枚举类型成员重名问题

如果在同一个作用域内定义了具有相同名称的枚举,C++中的“传统”枚举会在其作用域内导出枚举值,可能会导致名称冲突,

在一个大型项目中,不能保证两个不同的枚举都不会以同名命名。这个问题在C++ 11中已经得以解决,它使用枚举类,隐式地对枚举名称中的枚举值进行定义。

许多年前, 使用在命名空间内声明枚举的技巧解决这个问题, 而不是像这样声明枚举

enum status{

status_ok,

status_error

};

它在命名空间中声明:

namespace status{

enum status{

ok,

error

};

}

许多 c++ 项目使用此技巧,例如Unreal Engine(译者注:UNREAL ENGINE中文名称为“虚幻引擎” ,是目前世界最知名授权最广的顶尖游戏引擎,占有全球商用游戏引擎80%的市场份额)源代码就广泛使用此技术。

隐藏实现

对于在头文件中实现的模板库,开发者在调用时不需要用到特殊的数据类型,因为他们只专注于功能的实现,所以对于找到一种适合开发者调用库的方法是很有趣的。在c#中, “internal” 关键字做了这项工作, 但是在c++中,没有办法将公有数据类型完全对开发者进行隐藏。

在模块中将定义和实现分离,是由Boost库开发者们创建的一个c++惯用语法,但这些定义必须按照规则放入到一个可供开发者调用sub-namespace(子命名空间)中。

例如在 boost::math文档中, 它指定:

不适用于应用程序的函数是在 boost::math::detail中。

最后,学习从来不是一个人的事情,要有个相互监督的伙伴,对于C/C++感兴趣可以关注小编在后台私信我:【编程】一起来学习哦!可以领取一些C/C++的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了

世界大学城空间代码_C++中命名空间的五大常见用法相关推荐

  1. C 中命名空间的五大常见用法

    译者注:可能很多程序员对C 已经非常熟悉,但是对命名空间经常使用到的地方还不是很明白,这篇文章就针对命名空间这一块做了一个叙述. 命名空间在1995年被引入到 c 标准中,通常是这样定义的: 命名空间 ...

  2. head中一些标签的常见用法

    <head>中一些标签的常见用法 今天主要介绍,title\meta\link\base四种标签的常见用法 一 <title> title标签用来设置网站标题,当其为缺省状态( ...

  3. C#中异步多线程的常见用法

    先来看几个基本概念(纯属个人见解,可能不准确): 进程:程序运行时,占用的全部运行资源的总和. 线程:线程是隶属于操作系统管理的,也可以有自己的计算资源,是程序执行流的最小单位.任何的操作都是由线程来 ...

  4. Python中else关键字的常见用法

    Python中的else常见用法有三:选择结构.循环结构和异常处理结构. (1)选择结构 这应该是最常见的用法,与关键字if和elif组合来使用,用来说明条件不符合时应执行的代码块. (2)循环结构 ...

  5. pythonelse用法_Python中else关键字的常见用法

    Python中的else常见用法有三:选择结构.循环结构和异常处理结构. (1)选择结构 这应该是最常见的用法,与关键字if和elif组合来使用,用来说明条件不符合时应执行的代码块. (2)循环结构 ...

  6. 二极管在LDO电路中的几种常见用法

    文章目录 1.防反接--二极管接在VIN端 2.防反接--二极管接在GND端 3.输入输出钳位保护 4.降压&防灌电 大家好,我是记得诚. 交流群的一次讨论,想到简单汇总一下,二极管在LDO电 ...

  7. linux中find命令的常见用法

    整理的find命令常见用法,根据文件大小或者修改时间查询指定文件,以便后面查阅. 1.查找指定范围之内被修改或者访问过的文件 find . -type f -mtime -1     #查找系统中1天 ...

  8. js高级编程中命名空间的两种用法

    第一种: // 声明一个全局对象Namespace,用来注册命名空间 Namespace = new Object(); // 全局对象仅仅存在register函数,参数为名称空间全路径,如" ...

  9. string类有可以调换方向的函数吗_C++中的string类的用法小结

    相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯 ...

最新文章

  1. Unable to complete the scan for annotations for web application
  2. AI一分钟 | 网信办暂停快手、火山小视频算法推荐功能;无需人类司机,加州将允许自动驾驶汽车接送乘客
  3. 【Java Web开发指南】有状态会话Bean(SLSB) 和无状态会话Bean(SFSB)的区别
  4. ML之LiR:使用线性回归LiR回归模型在披萨数据集上拟合(train)、价格回归预测(test)
  5. 原文翻译:深度学习测试题(L1 W1 测试题)
  6. 关于有序二维矩阵查找和字符串替换的两道算法题
  7. bigfile.to服务器位置,Cloudera Manager 迁移服务器
  8. android自定义组合view,安卓自定义view之组合view
  9. 使用SQL Server更改跟踪创建SQL Server审核
  10. 年总结(五):再次突破自我的半年(2016.3—2016.9)
  11. Git常见相关知识与命令
  12. 【渝粤题库】陕西师范大学400001 思想政治教育原理 作业(专升本)
  13. java中float double利用BigDecimal运算
  14. 多个DbContext修改同一张表测试
  15. Python添加flac文件标签并实现wav转flac
  16. word中生成带方块的对勾
  17. 网络空间安全省赛A解析
  18. 肯定得想办法牵线搭桥
  19. java容器~面试知识点整理
  20. Python爬虫之MongoDB

热门文章

  1. union distinct_当面试官问你UNION 和UNION ALL之间的区别时该怎么答?
  2. 中国程序员 VS 印度程序员,太有味了...
  3. 文档如何清除html,html清除浏览器缓存.docx
  4. PHP婚庆网站论文,jsp婚庆网站
  5. 微博polg什么意思_成都网站代运营是什么意思?-建站
  6. c语言设计成行考核答案,20秋广东开放大学C语言程序设计成性考核参考答案(10页)-原创力文档...
  7. Tree HDU - 6547 (树链剖分,线段树)
  8. 使用SuperSocket打造逾10万长连接的Socket服务
  9. 【转】void及void指针的深刻解析
  10. memcache 总结笔记