阅读更多

2顶
1踩

编程语言

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

2017-06-12 16:08 by 副主编 jihong10102006 评论(0) 有20885人浏览
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...

  • 人力资源经理绩效考核表.xls

    人力资源经理绩效考核表

  • 智慧环卫管理平台建设方案Word(211页).docx

    一、智慧环卫管理平台的建设背景与目标 智慧环卫管理平台的建设源于对环卫管理全面升级的需求。当前,城管局已拥有139辆配备车载GPS系统、摄像头和油耗传感器的环卫车辆,但环卫人员尚未配备智能移动终端,公厕也缺乏信息化系统和智能终端设备。为了提升环卫作业效率、实现精细化管理并节省开支,智慧环卫管理平台应运而生。该平台旨在通过信息化技术和软硬件设备,如车载智能终端和环卫手机App,实时了解环卫人员、车辆的工作状态、信息和历史记录,使环卫作业管理透明化、精细化。同时,平台还期望通过数据模型搭建和数据研读,实现更合理的环卫动态资源配置,为环卫工作的科学、健康、持续发展提供决策支持。 二、智慧环卫管理平台的建设内容与功能 智慧环卫管理平台的建设内容包括运行机制体制建设、业务流程设计、智慧公厕系统建设、网络建设、主机和储存平台需求、平台运维管理体系、硬件标准规范体系以及考核评价体系等多个方面。其中,智慧公厕系统建设尤为关键,它能实时监控公厕运行状态,保障公厕的清洁和正常运行。平台建设还充分利用了现有的电子政务网络资源,并考虑了有线和无线网络的需求。在功能上,平台通过普查、整合等手段全面收集环卫车辆、企业、人员、设施、设备等数据,建立智慧环卫基础数据库。利用智能传感、卫星定位等技术实现环卫作业的在线监管和远程监控,实现对道路、公共场所等的作业状况和卫生状况的全面监管。此外,平台还建立了环卫作业网格化管理责任机制,实现从作业过程到结果的全面监管,科学评价区域、部门、单位和人员的作业效果。 三、智慧环卫管理平台的效益与风险规避 智慧环卫管理平台的建设将带来显著的环境、经济和管理效益。环境方面,它将有力推进环境卫生监管服务工作,改善环境卫生状况,为人民群众创造更加清洁、卫生的工作和生活环境。经济方面,通过智慧化监管,大大降低了传统管理手段的成本,提高了监管的准确性和效率。管理方面,平台能够追踪溯源市民反映的问题,如公厕异味、渣土车辆抛洒等,并找到相应的责任单位进行处置,防止类似事件再次发生。同时,平台还拥有强大的预警机制功能,能够在很多环卫问题尚未出现前进行处置。然而,平台建设也面临一定的风险,如部门协调、配合问题,建设单位选择风险以及不可预测的自然灾害等。为了规避这些风险,需要加强领导、统一思想,选择优秀的系统集成商承接项目建设,并做好计算机和应用系统的培训工作。同时,也要注意标准制定工作和相关法律法规的制定工作,以保证系统建设完成后能够真正为环卫管理工作带来便利。

Global site tag (gtag.js) - Google Analytics