世界大学城空间代码_C++中命名空间的五大常见用法
译者注:可能很多程序员对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++中命名空间的五大常见用法相关推荐
- C 中命名空间的五大常见用法
译者注:可能很多程序员对C 已经非常熟悉,但是对命名空间经常使用到的地方还不是很明白,这篇文章就针对命名空间这一块做了一个叙述. 命名空间在1995年被引入到 c 标准中,通常是这样定义的: 命名空间 ...
- head中一些标签的常见用法
<head>中一些标签的常见用法 今天主要介绍,title\meta\link\base四种标签的常见用法 一 <title> title标签用来设置网站标题,当其为缺省状态( ...
- C#中异步多线程的常见用法
先来看几个基本概念(纯属个人见解,可能不准确): 进程:程序运行时,占用的全部运行资源的总和. 线程:线程是隶属于操作系统管理的,也可以有自己的计算资源,是程序执行流的最小单位.任何的操作都是由线程来 ...
- Python中else关键字的常见用法
Python中的else常见用法有三:选择结构.循环结构和异常处理结构. (1)选择结构 这应该是最常见的用法,与关键字if和elif组合来使用,用来说明条件不符合时应执行的代码块. (2)循环结构 ...
- pythonelse用法_Python中else关键字的常见用法
Python中的else常见用法有三:选择结构.循环结构和异常处理结构. (1)选择结构 这应该是最常见的用法,与关键字if和elif组合来使用,用来说明条件不符合时应执行的代码块. (2)循环结构 ...
- 二极管在LDO电路中的几种常见用法
文章目录 1.防反接--二极管接在VIN端 2.防反接--二极管接在GND端 3.输入输出钳位保护 4.降压&防灌电 大家好,我是记得诚. 交流群的一次讨论,想到简单汇总一下,二极管在LDO电 ...
- linux中find命令的常见用法
整理的find命令常见用法,根据文件大小或者修改时间查询指定文件,以便后面查阅. 1.查找指定范围之内被修改或者访问过的文件 find . -type f -mtime -1 #查找系统中1天 ...
- js高级编程中命名空间的两种用法
第一种: // 声明一个全局对象Namespace,用来注册命名空间 Namespace = new Object(); // 全局对象仅仅存在register函数,参数为名称空间全路径,如" ...
- string类有可以调换方向的函数吗_C++中的string类的用法小结
相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯 ...
最新文章
- Unable to complete the scan for annotations for web application
- AI一分钟 | 网信办暂停快手、火山小视频算法推荐功能;无需人类司机,加州将允许自动驾驶汽车接送乘客
- 【Java Web开发指南】有状态会话Bean(SLSB) 和无状态会话Bean(SFSB)的区别
- ML之LiR:使用线性回归LiR回归模型在披萨数据集上拟合(train)、价格回归预测(test)
- 原文翻译:深度学习测试题(L1 W1 测试题)
- 关于有序二维矩阵查找和字符串替换的两道算法题
- bigfile.to服务器位置,Cloudera Manager 迁移服务器
- android自定义组合view,安卓自定义view之组合view
- 使用SQL Server更改跟踪创建SQL Server审核
- 年总结(五):再次突破自我的半年(2016.3—2016.9)
- Git常见相关知识与命令
- 【渝粤题库】陕西师范大学400001 思想政治教育原理 作业(专升本)
- java中float double利用BigDecimal运算
- 多个DbContext修改同一张表测试
- Python添加flac文件标签并实现wav转flac
- word中生成带方块的对勾
- 网络空间安全省赛A解析
- 肯定得想办法牵线搭桥
- java容器~面试知识点整理
- Python爬虫之MongoDB
热门文章
- union distinct_当面试官问你UNION 和UNION ALL之间的区别时该怎么答?
- 中国程序员 VS 印度程序员,太有味了...
- 文档如何清除html,html清除浏览器缓存.docx
- PHP婚庆网站论文,jsp婚庆网站
- 微博polg什么意思_成都网站代运营是什么意思?-建站
- c语言设计成行考核答案,20秋广东开放大学C语言程序设计成性考核参考答案(10页)-原创力文档...
- Tree HDU - 6547 (树链剖分,线段树)
- 使用SuperSocket打造逾10万长连接的Socket服务
- 【转】void及void指针的深刻解析
- memcache 总结笔记