C++命名空间(namespace)产生原因,特点,空间应用,好处

1.namespace产生原因

在C语言中,变量,函数,以至于类都是大量存在的,因此会产生大量的名称存在于全局作用域中,可能产生很多冲突,至此c++的祖师爷为避免命名冲突和名字的污染,造出来了关键字namespace来解决这种问题

1.2查找规则

c/c++规定用任何变量类型的函数都要向上访问,在向上的过程中去找到他的出处在编译时候查找没有在去全局中找。

例如;

在c语言中rand是包含在头文件#include<stdlib,h>中的函数,因此编译器无法判断是函数还是变量。但事实上用c++可以完美解决。

2.namespace的特点

2.1用namespace来定义命名空间

后加名字加{成员},可定义变量/函数/类型。

1.在命名空间中定义的变量。

2.定义函数。

3.定义结构体类型。

2.2本质是定义一个全局域各自独立

如2.1中的a在不同的域中可以定义同名且不冲突。

2.3 c++中的域

函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/ 类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。局部域和全局域除了会影响 编译查找逻辑,还会影响变量的⽣命周期,命名空间域和类域不影响变量⽣命周期。

域的名字在自己内部只能用一次,同一个域名字不能重复,但不同的域可以

2.4 namespace只能定义在全局,当然他还可以嵌套定义

图1;嵌套后要区别调用

图二注:当库很大或项目大还可以套中套来解决命名冲突 

 2.5项⽬⼯程中多⽂件

项⽬⼯程中多⽂件中定义的同名namespace会认为是⼀个namespace,不会冲突。

多⽂件中可以定义同名namespace,他们会默认合并到⼀起,就像同⼀个namespace⼀样

定个文件一个命名空间都会封在一起 

例如:当同时定义栈与队列 会产生多个文件

3.命名空间使用

 编译查找⼀个变量的声明/定义时,默认只会在局部或者全局查找,不会到命名空间⾥⾯去查找。所以 下⾯程序会编译报错。所以我们要使⽤命名空间中定义的变量/函数,有三种⽅式:

3.1指定命名空间访问

不易出错,推荐使用

3.2 展开命名空间中全部成员(展开头文件与命名空间的区别)

展开命名空间中全部成员--》变成全局变量因此可能造成命名冲突

展开头文件是将头文件在预处理阶段将头文件的代码拷贝过来

不推荐,冲突风险大,但是在小练习中为方便推荐使用。

3.3折中using将命名空间中某个成员展开

 当a用的不多但是b用的多是将b解开变成全局;

项⽬中经常访问的不存在冲突的成员推荐这种⽅式

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值