9.3.2 新的名称空间特性(4)
假设要访问Jill::fetch。由于Jill::fetch现在位于名称空间myth(在这里,它被叫做fetch)中,因此可以这样访问它:
当然,由于它也位于Jill名称空间中,因此仍然可以称作Jill::fetch:
如果没有与之冲突的局部变量,则也可以这样做:
现在考虑将using编译指令用于myth名称空间的情况。using编译指令是可传递的。如果A op B且B op C,则A op C,则说操作op是可传递的。例如,>运算符是可传递的(也就是说,如果A>B且B>C,则A>C)。在这个情况下,下面的语句将导入名称空间myth和elements:
这条编译指令与下面两条编译指令等价:
可以给名称空间创建别名。例如,假设有下面的名称空间:
则可以使用下面的语句让mvft成为my_very_favorite_things的别名:
可以使用这种技术来简化对嵌套名称空间的使用:
4.未命名的名称空间
可以通过省略名称空间的名称来创建未命名的名称空间:
这就像后面跟着using编译指令一样,也就是说,在该名称空间中声明的名称的潜在作用域为:从声明点到该声明区域末尾。从这个方面看,它们与全局变量相似。然而,由于这种名称空间没有名称,因此不能显式地使用using编译指令或using声明来使它在其他位置都可用。具体地说,不能在未命名名称空间所属文件之外的其他文件中,使用该名称空间中的名称。这提供了链接性为内部的静态变量的替代品。例如,假设有这样的代码:
采用名称空间的方法如下: