一个命名空间是一个作用域,在不同名字空间中命名相同的符号代表不同的实体。
命名空间可以在两个地方被定义:
在全局范围内,另一个命名空间中(形成嵌套名字空间)
不能够在函数和类的内部定义。
全局命名空间是隐式声明的,存在于每个程序中,可以用作用域操作符引用全局命名空间的成员。因为全局命名空间是隐含的,所以它没有名字。
命名空间可以是不连续的,它是由所有分离定义的命名空间的各个部分的整体构成的。
一个命名空间可以分散在多个文件中
不同的文件中命名空间的定义也是累积的。
但是匿名空间虽然可以在给定文件中不连续,但是不能够跨越文件,每个文件都有自己的胃命名的命名空间。
#include<iostream>
namespace Out{
int a=10;
int b=20;
namespace in{
int c=100;
int d=200;
}
}
int main(){
std::cout<<Out::a<<std::endl;
std::cout<<Out::in::c<<std::endl;
return 0;
}
结果
10
100
Program ended with exit code: 0
#include<iostream>
namespace{//未命名的命名空间
int a=10;
}
using namespace std;
namespace{
void name_print(){
cout<<"a="<<a<<endl;
}
}
int main(){
a=100;//直接使用
name_print();//直接使用
return 0;
}
//匿名空间使作用域约束在一个文件中,代替使用static来声明变量和函数
可以使用using namespace 指令,这样在使用命名空间时就可以不用在前面加上命名空间的名称。这个指令会告诉编译器,后续的代码将使用指定的命名空间中的名称。
using指令也可以用来指定命名空间中的特定项目