c++入门——命名空间的定义与使用

域和命名空间的引入

在c语言中 ,变量和函数都是大量存在的,这些变量和函数都存在于全局作用域中或者局部作用域中,可能会导致变量冲突。

什么是全局作用域?

定义一个全局变量a  就是在全局范围内使用,处于全局作用域

什么是局部作用域?

在main函数中定义一个局部变量,在函数内部使用,处于局部作用域

每个函数都有自己的局部作用域

局部和全局都有相同的变量

编译器会先从局部域寻找变量      再去全局域寻找

上图只是单个变量在局部和全局中名字冲突   

如果是函数名和变量名冲突呢  

编译器是这样报错的   rand在以前的定义是函数   

c语言没办法解决类似的命名冲突的问题  所以c++提出的命名空间域来解决这样的问题

1、命名空间的定义

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}
中即为命名空间的成员
1.1正常的命名空间域
命名空间域中可以定义  变量 函数 类型

   

1.2命名空间域的嵌套

1.3命名空间的合并

同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中
一个工程中的test.h和上面test.cpp中两个N1会被合并成一个
1.4命名空间的具体化  
相比于全局域和局部域   命名空间域是单独出来的一片空间   
类似于  全局域是所有人一起的菜园子   局部域是自己家的  
而命名空间域   是野生的   单独存在的  不属于谁  但好像谁都可以用  在限定的条件下   
 

2、命名空间的使用

命名空间域该怎么使用呢??

这里引入一个新的符号   ::作用域限定符   

命名空间域的使用有三种方式   

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

2.使用using  将空间的某个成员展开   (类似于野生菜园子的一部分变成了共享菜园子)

3.使用using namespace 命名空间全部展开 (野生的菜园子全部变成共享菜园子)

命名空间域的使用和全局域/局部域的区别就是  需要作用域限定符  

命名空间使用的优点和缺点  

1.不对命名空间进行任何展开时

每次使用有需要命名空间加限定符 写起来很麻烦

补充一点:std    是c++所有库函数的命名空间

但是在一些项目和大工程中   命名空间做到了很好的隔离和防护作用   

参数重名问题  还有访问冲突问题  得到了很好的解决

2.对命名空间部分内容展开时
一些经常用到的可以对其进行展开   例如 输出 与 换行
经常用到的展开  减少了代码量  同时也没有多大  危险性   
3.对命名空间全部内容进行展开
命名空间所有内容全部开放   类似于直接成为全局变量
  
但是访问冲突问题  还有参数重名问题   又回到了c语言未解决的地方
命名空间全部展开适用于  算法习题或者平常巩固知识的习题当中
另外补充一下编译器的搜索原则    
不指定域     优先访问当前局部域  再访问全局域
指定域   (也就是加了作用域限定符)  直接去指定域搜索   
总结:本篇文章引入了namespace  命名空间域  以及命名空间的定义与使用   
第一篇博客   有写的不好的地方  多多指教
  • 36
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值