3-1 命名空间
1 namespace
- 命名空间解决了命名冲突问题
- 大型工程中推荐直接采用域解析运算符,采用using易造成二义性
- 不要在头文件按中使用using
命名空间通常用于解决命名冲突的问题,比如在大型项目中,我们可能在两个文件中命名了两个相同名字的函数,或者变量,为了明确我们所使用的函数或变量到底是哪一个文件中的,就引入了namespace
的概念。
- 情形一 使用
名称空间相当于提供了一个声明区域,其使用方法如下:
namespace Jerry{
double money;
void get_MOney();
int pal;
strut well{...};
}
名称空间可以是全局的,也可以是嵌套在另一个名称空间中的,但是不可以位于代码块中。对于名称空间中名称的访问,采用域解析运算符::
来实现,如
Jerry::money=12.34;
Jerry::get_Money();
但是我们每一次使用都采用上述方法在有些时候会显得程序冗杂,而且编写者也会感到不耐烦,因此C++提供了两种机制来建辉对名称空间中名称的使用,即using声明和using编译指令,其中using声明将特定的名称添加到它所属的声明区域,using编译指令(using namespace)使整个名称空间可用。
using Jerry::money;//using声明
using namespace Jerry;//using编译指令
这个时候我们就明白写程序时一直所使用的using namespcae std
意思就是可以使用名称空间std中的所有,例如cout
、cin
- 情形二 注意事项
对于using要注意不要在头文件中使用,容易造成潜在冲突。另外采用using也容易造成二义性,比如Jerry和Tom的名称空间中都有money,采用using的话就会造成冲突
using Jerry::money;
using Tom::money;
如果我们把using去掉的话,就不会出现这种情况了