阅读更多

2顶
1踩

编程语言

原创新闻 C++中命名空间的5大常见用法

2017-06-12 16:08 by 副主编 jihong10102006 评论(0) 有20963人浏览
c++
引用

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

命名空间在1995年被引入到 c++ 标准中,通常是这样定义的:
引用
命名空间定义了新的作用域。它们提供了一种避免名称冲突的方法。

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

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

1-避免名称冲突

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

2-模块化应用程序

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

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

3-匿名命名空间

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

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

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

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

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

它在命名空间中声明:
 namespace status{  
   enum status{  
     ok,
      error  
 };  
}

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

5-隐藏实现

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

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

例如在 boost::math文档中, 它指定:
引用
不适用于应用程序的函数是在 boost::math::detail中。

2
1
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 揭秘 Stable Diffusion:利用 AI 智能绘图功能,打造出具有创意性的平面设计作品——AI 作图神器 Stable Diffusion 有哪些强大功能?应用案例详解

    在WebUI中的采样方法(Sampler)调整的采样的算法,采样步数(Sampling steps)调整的就是采用重复的次数,提示词相关性(CFG Scale)调整的就采样的方向,数字越大就会越严格的按照提示词采样,越小则采样的随机性越强。...

  • 百度的个人空间做得不错啊,风格的可定制性很强的

    百度的个人空间做得不错啊,风格的可定制性很强的,当然,对于不熟悉css的用户困难了点儿,可碰到像俺这样的,嘿嘿... ... 做了一个,大家来踩踩 [url]http://hi.baidu.com/lifethink[/url]...

  • 千帆大模型实践:手把手教你用千帆大模型平台训练自己的大模型,训练、微调、强化、部署一站式

    细分领域电销场景的商品介绍、推广文章等需要对推理结果进行定制调整,则可在文心千帆使用模型在线微调训练功能,快速生产行业场景定制模型服务,满足用户特定需求。 场景一:对话沟通 匹配场景:智能营销、智能...

  • NLP领域的最新研究进展

    在对话上下文理解,对话生成,低资源对话建模,知识对话模型方面做出了很多开创性的工作,为微软的聊天机器人产品微软小冰的每一代升级贡献了核心算法,并于EMNLP 2018,TheWebConf 2019,以及SIGIR 2019上做主题为...

  • 百度输入法的B次元:从生活必需品,走向产业引擎

    我们从B端与C端市场需求特性的差异化来看,会发现一种产品和技术,只有在具有三个特征的情况下,才能被B端用户接受: 1、产品具有从普遍性走向行业化、定制化的可能,能够满足差异化较强的商业需求; 2、产品能够从...

  • 博士win7风格包_酒店测评:30年仅开2家,褒奖无数,风格简洁却暗藏玄机!

    最近我疯狂的迷恋上了性冷淡风格的酒店,而上海的好处就是什么样风格的酒店几乎都可以见到,豪奢、复古或是简约都不在话下。这个周末,我特意冲着性冷淡去拔草了一直在我愿望清单上的“上海素凯泰”。这一去,本着住...

  • 【软工】week3-个人阅读作业-软件案例分析

    个人作业-软件案例分析 我在这个课程的目标是 提高开发项目的编程水平,锻炼合作能力 这个作业在哪个具体方面帮助我实现目标 对软件产品了解程度,测试维护工作 零、题目选择 现在许多人生活中都离不开

  • 2011Android技术面试整理附有详细答案(包括百度、新浪、中科软等多家公司笔试面试题)

    常规在PC上开发我们使用Dom相对轻松些,但一些性能敏感的数据库或手机上还是主要采用SAX方式,SAX读取是单向的,优点:不占内存空间、解析属性方便,但缺点就是对于套嵌多个分支来说处理不是很方便。而DOM方式会把...

  • 中国开源项目哪家强?看看阿里,百度,腾讯,360等都开...

    奇虎360 ...Atlas是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层...它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。目前该项目在360公

  • ELK日志管理系统图示全过程详解

    概要 我们常说的ELK日志收集系统,完整的应该称为:ELK Stack是软件集合Elasticsearch...新增得FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集..................

  • AI:大模型领域最新算法SOTA核心技术要点总结(一直持续更新)、大模型实战与理论经验总结(训练优化+代码实战+前沿技术探讨+最新案例应用)、带你精细解读多篇优秀的大模型论文、AI领域各种工具产品集合

    同时,博主也会特持续收集很多基于AI的产品合集,以方便广大网友试用和测试,并同时反馈产品效果,博主会及时更新产品排序。如果大家有新的AI工具,也可留言,博主会将留言的提到的AI小工具,加入到本文章内容。 ...

  • 程序人生 - 个人技术博客如何选择?(CSDN、博客园、简书、知乎专栏、Github Page)

    有很多技术人员在学习到一定程度后发现了写博客的重要性,一方面帮助自己记忆,一方面也能帮助他人解决问题... SEO做得好,无论是百度还是google(尤其是百度)在搜索问题的时候排名靠前 阅读量高,从头开始写也不..

  • 文心千帆大模型平台,一站式企业级大模型平台

    从计算机视觉到自然语言处理,从语音识别到推荐系统,大模型正逐渐为多个领域取得突破性成果的重要基础。在本文中,我们将深入探讨大模型的概念、应用和挑战,并详细介绍百度智能云的大模型平台,通过实际体验来感受...

  • Android之基于百度云推送IM

    偶然的一天,发现百度出了一个云推送包,想想百度的服务器还是比较靠谱的说,怎么着也比我们自己搭建的服务器要稳定,于是乎,我就花了几天时间,写了一个小小的聊天工具,权当是练手。主要思路是:客户端的聊天内容...

  • Qt/C++原创项目作品精选(祖传原创/性能凶残/界面精美)

    从事Qt开发十年有余,一开始是做C#.NET开发的,因为项目需要,转行做嵌入式linux开发,在嵌入式linux上做可视化界面开发一般首选Qt,当然现在可选的方案很多比如安卓,但是十多年前那时候板子性能低,安卓在这个上面...

  • 学习大数据开发,一定不可错过的大数据组件图谱——很齐全

    HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。 GlusterFS是一个集群的文件系统,支持PB级的数据量。GlusterFS 通过RDMA和TCP/IP方式将分布...

  • Google离开的这10年:百度跌下神坛,搜索的未来在哪里

    然后又去用了百度,广告多到不行,在几个星期前,百度刚刚发了Q3财报,呈上升趋势,衷心祝贺,但是能不能把广告去掉一些呢? 这让我不由地想起了Google。 2010年1月13日,Google离开中国。掐指算来,Google...

  • 基于Matlab/Simulink的变压器饱和与励磁涌流仿真模型构建及应用

    内容概要:本文详细介绍了如何利用Matlab/Simulink搭建变压器的饱和和励磁涌流仿真模型。首先阐述了铁芯非线性特性(如磁滞和饱和)对变压器性能的影响,强调了这些特性在仿真中的重要性。接着具体讲解了如何通过设置Saturable Transformer模块的磁化曲线参数来模拟铁芯的饱和行为,并通过Lookup Table实现自定义磁滞回线。对于励磁涌流的仿真,则着重讨论了剩磁设置和合闸瞬间相位角的选择,以及如何通过FFT分析涌流波形中的谐波成分。此外,文中还提供了参数转换模块的实现方法,用于将铭牌参数转化为仿真所需的格式。最后提醒了一些常见的仿真陷阱及其应对措施。 适合人群:从事电力系统仿真研究的技术人员,尤其是对变压器建模感兴趣的工程师。 使用场景及目标:适用于需要精确模拟变压器动态行为的研究项目,如故障重现、保护装置测试等。目标是帮助用户掌握变压器饱和特性和励磁涌流的仿真技巧,提高仿真的准确性和实用性。 其他说明:文中提供的模型和代码主要用于教学和技术交流目的,不应用于商业产品开发。同时建议读者在实践中根据实际情况调整相关参数,确保仿真结果符合预期。

  • S7-200与MCGS在热加工机械手气动控制系统中的设计与实现

    内容概要:本文详细介绍了用于热加工机械手的气动控制系统设计与实现。系统由传感器、气动执行机构、控制器、PLC和工控机等硬件设备构成,结合PID控制算法和人机界面(HMI),实现了机械手的高效、精准控制。文中具体阐述了系统的硬件组成、控制算法、PLC程序设计、人机界面的功能及其代码实现。此外,还讨论了高温环境下的温度补偿、故障诊断、手动调试技巧等实际应用中的注意事项。 适合人群:从事工业自动化领域的工程师和技术人员,特别是熟悉PLC编程和气动控制系统的专业人士。 使用场景及目标:①帮助工程师理解和掌握S7-200 PLC与MCGS组态软件在气动控制系统中的应用;②提供详细的代码实例和调试技巧,便于实际项目的开发和维护;③提高机械手在高温环境下的稳定性和可靠性。 其他说明:文章不仅涵盖了理论知识,还包括大量实用的操作经验和代码片段,有助于读者更好地应用于实际工程中。

Global site tag (gtag.js) - Google Analytics