标准C++中引入了关键字namespace(命名空间),可以更好地控制标识符的作用域,避免命名冲突。在大型的软件项目中,几个程序员使用的函数名或类名发生冲突的可能性很大。假设某个程序员使用名为map的类------也许指的是计算机游戏中的地图------而未意识到标准库中已经有map类(键值对集合)。通过使用命名空间,就可以在同一个程序中使用这两个类。如果要使用标准库中的map类,可以使用限定名std::map明确指定标准map类。若要使用在其他命名空间比如:acme,则可以用acme::map来指定它。
命名空间的定义:
<span style="font-size:18px;">namespace 命名空间名
{
属性1
属性2
......
属性n
}</span>
using namespace 命名空间名; //使用整个命名空间
using name::variable;//使用命名空间中的变量
命名空间别名:
<span style="font-size:18px;">namespace 别名=命名空间;
eg:namespace acme=ACME_Software_San_Jose_CA_US;</span>
1.为命名空间取长且唯一的名字
2.使用别名特性设置短的别名
3.除了std以外不要为其他命名空间使用using指示符
局部命名空间的声明
using语句与声明语句服从相同的作用域规则。例如:ACME软件分配自定义形式的stack。我们想在函数体中使用该类型栈,而在函数声明外使用标准库容器。为了做到这一点,将ACME的using语句嵌套在函数定义之中:
<span style="font-size:18px;">using namespace std; //允许stack表示标准库
void f(double data)
{
using acme::stack;//此时,ACME版本的stack遮蔽了std::stack
......
}</span>