C++中命名空间

标准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>


参考材料:big c++

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值