初识C++--命名空间?

本文探讨了C语言中命名空间的作用,如何解决因函数重名导致的冲突,以及C++中的全局展开机制,以减少命名空间带来的繁琐性。
摘要由CSDN通过智能技术生成

C语言的缺陷

命名空间

这里有一段代码,可以正常打印rand

但如果包一个头文件,程序就会报错,这是因为C语言库里包了一个rand函数,这是用来求随机值的,就与定义的变量rand重名了。

在C语言中,相同域里不能重名,不同域则是可以

这里的4个a并不相互冲突 

若想在f1里访问到全局的a,就要加::,叫做域作用限定符

这里第一个a会先在::的左边找,左边找不到就在全局找

还有一种情景:

小A实现了队列

小B实现了链表,两个文件放入一个项目

试运行发现struct重定义

这时c++作者就想设计出了命名空间

将小A的代码封装在命名空间AA里

B的代码也封装在BB里

这样就可以解决冲突的问题,但是编译器首先会在局部找,接着在全局,但是默认不会在命名空间找

所以还需要写一个在指定命名空间中找的代码,这样就能解决了;

最后,当命名空间冲突的时候,可以在外面再嵌套一个;而且还能多层嵌套,但是就比较繁琐了

自从有了命名空间后每次使用时都要指定一下,较为繁琐

除了使用命名空间指定访问外,还有一种方法

叫做全局展开

其实c++标准库也被放在叫std的命名空间里,主要也是避免程序员定义的变量与C++库里的冲突 ,全局展开时就能使用C++库里的函数

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值