前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++(名字空间)

C++(名字空间)

作者头像
用户2617681
发布2019-08-08 11:29:26
9520
发布2019-08-08 11:29:26
举报
文章被收录于专栏:秘籍酷

假如一间教室里面,有两个同学都叫柳岩,那对大家都挺不方便的。咳咳,怎么不方便了?卷帘入馆,为你揭晓~~

你想啊,两个柳岩,那老师点名的时候,就分不清谁是谁了,对吧?多不方便啊!那怎么解决这个问题呢?很简单,我们可以把重名的同学分配到不同的班级里,甚至为了防止某些新插班生进来后跟原有的同学重名,我们可以为这些新增同学重新构建一个新的班级!

程序中也有类似的情况,如果两个变量或函数重名,那我们在调用的时候,系统就分不清谁跟谁了。C++诞生的初衷是为了解决大型软件设计问题,在一个巨大的软件系统中,各个部件(库)之间有名字冲突是太正常的事情了(班级太大,总会重名),这种冲突的概率比起C语言更为严重,因此C++专门搞了一套机制,叫做namespace,来解决名字冲突的问题。

以上提到的“柳岩”,相当于程序中的“标识符”,也就是什么变量啦、函数啦这些东西,而提到的“教室”,相当于程序中的“名字空间”,也就是所谓的namespace。C++采用定义名字空间(教室)的方式,将标识符(学生)分辖到各个空间里面来解决问题,虽然C语言也有名字空间,但它是固定不变的,而C++允许自定义,而且C++的名字空间是开放式的,也就是定义了之后还可以增删,极大改善了系统标识符冲突的矛盾。

额,是的同学你猜对了,接下来没柳岩啥事儿了~~

先来一段最简单代码打头阵:

代码输入:

88

上述代码中第3行,表示导入系统的标准名字空间std,正是由于这句话,所以下面的第7行才能使用诸如cout、max和endl等标识符,就像告诉了你1001号教室,你才知道里面有小明小红等同学。

那如果我自己也写了一个max函数呢?请看:

代码输出:

1

此时,全局作用域的自定义max函数掩盖了标准名称空间的max,请注意,代码中虽然有两个max函数,但并没有发生重载,系统max函数只是暂时被自定义的全局函数max掩盖了。想要在上述代码中使用系统max函数,必须明确指明,比如这样:

代码输出:

88

为了更加明确我们自己写的max跟系统的max函数不同,可以将自家max函数放在单独一个namespace(比较叫myspace),这样做更重要的一点是:从此之后在别的任何程序中如果想调用这个自家的max函数,只要导入myspace即可,此时自家的max跟系统的max地位是一样的,只不过一个在std教室里,一个在myspace教室里而已。

请看下面的代码:

程序输出:

88

1 更进一步,如果再定义一个全局函数max情况会如何?来看这个代码:

程序输出:

88

1

2

2

可见,上述代码的第24行和第25行是等价的,此时调用的是自家的max函数。

C++就是这样,依靠名字空间机制,让众多标识符可以不担心被重名,比如在一个大型项目中,会引用大量的第三方库,每一个库中都可能有大量重复的标识符,但他们都分属不同的namespace,也就大大免除了冲突的烦恼了。哦也!

需要了解更多IT编程、嵌入式开发视频教程的同学,点击阅读原文进入粤嵌林世霖官方微店,寻找属于你的刀枪兵刃,血洗东京踏平日本就靠你了!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 秘籍酷 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档