看看这个片段:
namespace A {
int fn();
}
namespace B {
int fn();
}
// namespace Ns {
using namespace A;
using namespace B;
using A::fn;
int z = fn();
// }
Run Code Online (Sandbox Code Playgroud)
这段代码不能编译,因为fn()它不明确int z = fn();
如果我将using's并z放入命名空间(删除两个//),代码将编译.这是为什么?全局命名空间有什么特别之处?
见[namespace.udir]/2
一个using指令规定,在被提名的命名空间中的名字可以在该范围内使用 using指令后出现using指令.在非限定名称查找(3.4.1)期间,名称看起来好像是在最近的封闭命名空间中声明的,其中包含using-directive和指定的命名空间.
因此,当你拥有的命名空间Ns中,指令using namespace A;和using namespace B让A::fn与B::fn出现在全局命名空间,而using A::fn;品牌fn出现Ns.后者声明在名称查找期间"获胜".
| 归档时间: |
|
| 查看次数: |
170 次 |
| 最近记录: |