为什么我必须在嵌套的匿名命名空间中为函数指定外部命名空间?

时间:2014-10-21 13:05:22

标签: c++ namespaces

给定命名空间A. Inside是一个带有函数f和类X的匿名命名空间,也带有函数f:为什么在从A :: X调用匿名f时必须指定外部命名空间A ::作为限定符:: F'

作为一个最小的例子:

#include <iostream>

using namespace std;

namespace A {

 namespace {
     int f( int i ) { return i; }
 }

 class X {
 public:
     static int f() { A::f( 10 ); }
 };

}


int main()
{
   cout << A::X::f() << endl; 

   return 0;
}

1 个答案:

答案 0 :(得分:7)

因为,在X::f的范围内,非限定名称f指的是X::f,而不是任何其他f。在范围内声明的名称将隐藏外部范围中具有相同名称的任何内容。