资讯详情

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

2017-07-04 阅读:205 来源:潭州教育
进入>

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

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

避免名称冲突

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

模块化应用程序

命名空间采取“Namespace-by-feature”的方法使代码模块化。”Namespace-by-feature”

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

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

匿名命名空间

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

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

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

在一个大型项目中,不能保证两个不同的枚举都不会以同名命名。这个问题在C++

11中已经得以解决,它使用枚举类,隐式地对枚举名称中的枚举值进行定义。

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

enumstatus{

status_ok,

status_error

};

它在命名空间中声明:

namespacestatus{

enumstatus{

ok,

error

};

}

许多c++项目使用此技巧,例如UnrealEngine(译者注:UNREALENGINE中文名称为“虚幻引擎”

,是目前世界最知名授权最广的顶尖游戏引擎,占有全球商用游戏引擎80%的市场份额)源代码就广泛使用此技术。

隐藏实现

对于在头文件中实现的模板库,开发者在调用时不需要用到特殊的数据类型,因为他们只专注于功能的实现,所以对于找到一种适合开发者调用库的方法是很有趣的。在c#中,

“internal”关键字做了这项工作,但是在c++中,没有办法将公有数据类型完全对开发者进行隐藏。

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

加载全文

免责声明:本站部分内容、图片来自用户自主上传,如果您对本站信息资源版权的归属问题存有异议,请您致信,我们会立即做出答复并及时解决。如果您认为本站有侵犯您权益的行为,请通知我们,我们一定根据实际情况及时处理。

以上是潭州教育为大家整理的有关C++中命名空间的五大常见用法的全部内容,更多精彩请访问学习资讯新闻专栏。

相关课程

更多>
2020猎学网广告栏
申请课程免费试听名额

课程顾问24小时内联系您

你好

顾问将于24小时内联系您!

确定
在线咨询 微信咨询 立即报名
申请1对1课程顾问咨询服务
×
你好

顾问将于24小时内联系您!

确定
长沙猎学网 >潭州教育 >C++中命名空间的五大常见用法