1、提出原因
程序中会使用多个文件或者程序由多个程序员合作完成,如果有多个重名的变量存在全局命名空间中,这将引发命名空间污染。通过建立多个命名空间对重名变量进行一定修饰,以消除名字冲突问题。
2、namespace的创建
2.1 有名命名空间
namespace name(用户自定义)
{
变量、函数等等
}
2.2 无名命名空间
namespace
{
变量、函数等
}
对于无名命名空间,主要是对本地文件进行限制,如
namespace
{
int a=0;
}
则当使用变量a时,默认使用上述命名空间中的a。
3、namespace的使用
3.1 空间名::空间成员
如在header1.h中有如下声明:
namespace test1
{
int a=0;
int b=1;
}
在header2.h中有如下声明:
namespace test2
{
int a=2;
int b=3;
}
在main.cpp中:
#include<header1>
#include<header2>
int main()
{
cout<<test1::a<<endl; //输出0
cout<<test2::a<<endl; //输出2
}
3.2 using 空间名::空间成员
#include<header1>
#include<header2>
int main()
{
cout<<using test1::a<<endl; //输出0
cout<<a<<endl; //输出0
cout<<test2::a<<endl; //输出2
}
使用using 空间名::空间成员后,当再次出现该空间成员时,默认为在using后声明的空间。
3.3 using namespace 命名空间
如using namespace std;则当出现命名空间std中的成员时,默认使用std中的实现方法。