名称空间是什么
为了让编写大程序以及多个厂商现有代码组合起来更方便,比如有
- A厂写的代码里面包含了一个函数wanda()
- B厂写的代码里面也包含了一个函数wanda()
此时如果你想把A B两个厂商的代码组合起来,就有可能会发生函数名字冲突这样的事情。
而名称空间能让厂商把其产品封装在一个叫做名称空间的单元中,这样就可以使用名称空间来指出想用哪个厂商的产品。
比如使用A公司的wanda()函数可以这样写
A:wanda();
使用B公司的wanda()函数可以这样写
B::wanda();
using的使用
看到上面可能就会有同学问,每一次都在前面加一个名称空间,那不是很繁琐嘛,所以为了解决这一问题,就诞生了using这一关键字。
比如你使用
using namesapce A;
wanda();
表达的意思就和
A::wanda();
是一样的,就是你使用了using namesapce A
这一语句以后,你以后使用的函数都默认是A公司的函数。
using namesapce std;的解释
我们在开始学习C++的时候都会遇到一个问题,这一句using namespace std;
到底是干什么用的,有了上面的知识以后我们知道,他的意思就是后面用的函数都是std这个名称空间(公司) 的函数,那么std
又是什么呢?
C++的标准组件,都被放在了std
这一命名空间里面了,所以如果你想使用C++的标准组件你就需要从这个命名空间中调用函数。
但是该方法也有缺陷,比如下面的代码
/*A空间包含的两个函数test1() test2()*/
test1();
test2();
/*B空间包含的两个函数test1() test2()*/
test1();
test2();
如果我们想调用A空间的中test1()
和B空间中的test2()
那么我如果使用上面的方法来写代码的话会是下面这样
using namespace A;
test1();
using namespace B;
test2();
这会很不方便,特别是当命名空间很多的时候,而且特别容易出错,因为你没办法在开头的时候就写好,要使用哪一些命名空间,因为每个命名空间空间都有作用域的,使用using namespace x;
后,后面的函数都会默认从x里面出来,这就需要我们一边写代码还要一边写using namespace x;
很容易出错。所以我们很多时候会用下面这样的方式来写
using A::test1();
using B::test2();
test1();//默认使用的是A中的test1
test2();//默认使用的是B中的test2