C++中未命名的名称空间的用法详解

C++中未命名的名称空间的用法详解

可以通过省略名称空间的名称来创建未命名的名称空间:

namespace    //unnamed namespace
{
    int ice;
    int bandycoot;
}

这就像后面跟着 using 编译指令一样,也就是说,在该名称空间中声明的名称的潜在作用域为:从声明点到该声明区域末尾。从这个方面看,它们与全局变量相似。然而,由于这种名称空间没有名称,因此不能显式地使用using 编译指令或 using 声明来使它在其他位置都可用。具体地说,不能在未命名名称空间所属文件之外的其他文件中,使用该名称空间中的名称。这提供了链接性为内部的静态变量的替代品。例如,假设有这样的代码:

static int counts; // static storage, internal linkage
int other();
int main()
{
    ...
}

int other()
{
    ...
}

采用名称空间的方法如下:

namespace
{
    int counts; //static storage,internal linkage
}

int other();
int main()
{
    ...
}

int other()
{
    ...
}

一般说来,使用 using 声明比使用 using编译指令更安全,这是由于它只导入指定的名称。如果该名称与局部名称发生冲突,编译器将发出指示。参见【0voice C++】using编译指令导入所有名称,包括可能并不需要的名称。如果与局部名称发生冲突,则局部名称将覆盖名称空间版本,而编译器并不会发出警告。另外,名称空间的开放性意味着名称空间的名称可能分散在多个地方,这使得难以准确知道添加了哪些名称。
下面是大部分示例采用的方法:

#include <iostream>
int main()
using namespace std;

首先,#include语句将头文件iostream放到名称空间std中。然后,using编译指令是该名称空间在 main()函数中可用。有些示例采取下述方式:

#include <iostream>
using namespace std;
int main()
{
	...
}

这将名称空间std中的所有内容导出到全局名称空间中。使用这种方法的主要原因是方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值