ing指示有用的一种情况是:用在命名空间本身的实现文件中。
6、using指示例子
namespace blip
{
int bi = 16,bj = 15,bk = 23;
}
int bj = 0;
void manip()
{
using namespace blip;
++ bi; //17
++ bj; //Error:ambiguous
++ ::bj; //1
++ blip::bj; //16
int bk = 97;
++ bk; //98
}
manip中的 using提示使 manip能够直接访问blip中的所有名字:使用它们的简化形式,该函数可以引用这些成员的名字。
【警告:避免使用using指示】
using指示注入来自一个命名空间的所有名字,它的使用是靠不住的:只用一个语句,命名空间的所有成员名就突然可见了。虽然这个方法看似简单,但也有它自身的问题。如果应用程序使用许多库,并且用using 指示使得这些库中的名字可见,那么,全局命名空间污染问题就重新出现。
而且,当引入库的新版本的时候,正在工作的程序可能会编译失败。如果新版本引入一个与应用程序正在使用的名字冲突的名字,就会引发这个问题。
另一个问题是,由using指示引起的二义性错误只能在使用处检测,这个后来的检测意味着,可能在特定库引入很久之后才引发冲突,如果程序开始使用该库的新部分,就可能引发先前未检测到的冲突。 相对于依赖于using指示,对程序中使用的每个命名空间名字使用 using声明更好,这样做减少注入到命名空间中的名字数目,由using 声明引起的二义性错误在声明点而不是使用点检测,因此更容易发现和修正。