namespace MyNamespace { static void foo1() { } } using namespace MyNamespace; class MyClass { void foo2() { ::foo1(); } };
范围解析操作::表示在全局命名空间中使用方法.在这里我们可以使用:: foo1().这意味着方法foo1()在全局命名空间中,对吗?
我的问题是,使用命名空间ANAMESPACE_NAME是否意味着我们将命名空间ANAMESPACE_NAME中的所有元素导入全局命名空间?
解决方法
C 2003标准的第3.4.3.4节有一个答案:
A name prefixed by the unary scope operator :: (5.1) is looked up in
global scope,in the translation unit where it is used. The name shall
be declared in global namespace scope or shall be a name whose
declaration is visible in global scope because of a using-directive
(3.4.3.2).
这一段在C 11 FDIS中几乎相同,因此这可能也适用于C 11.