在C语言中只有一个全局作用域
C语言中所有的全局标识符共享同一个作用域
标识符之间可能发生冲突
命名空间将全局作用域分为不同的部分
不同命名空间中的标识符可以同名而不会发生冲突
命名空间可以相互嵌套
全局作用域也叫默认命名空间
避免名字定义冲突和使用库中相同名字导致的冲突,更好地控制标识符的作用域。
namespace name{...}
使用整个命名空间:using namespace name;
使用命名空间中的变量:using name::variable;
使用默认命名空间中的变量:::variable
默认情况下可以直接使用默认命名空间中的所有标识符
可以嵌套使用
namespace A{
namespace B{
a
}
}
使用:A::B::a
a.using namespace std;
//namespace是一个命名空间的关键字,总的意思是:从此条命令后都是使用这个空间
b.using std::对象;
//只能有一个对象
c.std::对象+其它
使用标准库中的一个名字时,必须显式说明我们想使用来自命名空间 std 中的名字
namespace std1{ int a1 = 1;};
namespace std2{int a1 = 2;};
int main()
{
a1 = 0;
//全局
std1::a1 = 11;
std2::a1 = 22;
}
有了 using 声明就不需要专门的前缀也能使用所需的名字【只需使用 using 声明声明一次,在之后使用时就不需要使用前缀】
using namespace::name;
每个 using 声明引用命名空间中的一个成员。
位于头文件的代码一般不应该使用 using 声明,因为头文件的内容会拷贝到所有引用它的文件中。若头文件中有某个 using 声明,每个使用该头文件的文件都会有这个声明,可能会造成名字冲突。