c++命名空间

概要

        使用命名空间的目的是对标识符的名称进行本地化, 以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。


        我们定义的全局变量rand与库函数中的rand函数产生冲突,所以报错了。

        C语言没办法解决类似这样的命名冲突问题,所以C++提出了namespace来解决


(wmm是命名空间的名字,一般开发中是用项目名字做命名空间名。)

使用了namespace解决了冲突的问题。


命名空间定义

        定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{} 中即为命名空间的成员。

1.正常的命名空间定义

2.命名空间嵌套

3. 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。

(一个工程中的test.h和上面test.cpp中两个wmm1会被合并成一个)

 


命名空间使用

1.加命名空间名称及作用域限定符

2.使用using将命名空间中某个成员引入

(左图)使用using  wmm1::a的好处是不需要那么麻烦,一直的写“wmm1::a”,可以简写成a或者 ::a

(右图)因为编译器查找的顺序是,先局部,再全局,最后在namespace,所以当有局部变量存在且与namespace中的变量命名一样的话,就会打印出局部变量的值。

同时,因为编译器先局部,再全局,最后在namespace的顺序,所以在使用using wmm1::a 进行展开的话(展开就相当于提升了了查找的顺序),当全局的命名与namespace中的变量一样的话,使用::a或者wmm1::a打印就会产生冲突。

解决方式:1.若使用using wmm1::a  ,注意namespace中的变量与全局变量是否命名相同。2.不要使用using wmm1::a

3.使用using namespace 命名空间名称引入

上面那个是namespace中的某个,而这个是指将namespace中的所有都展开。

如果有什么不理解的地方,可以上手试一下~试试就会啦~

如果这篇文章有帮助到你,我深感荣幸~

有问题欢迎指正批评~

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值