给定命名空间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;
}
答案 0 :(得分:7)
因为,在X::f
的范围内,非限定名称f
指的是X::f
,而不是任何其他f
。在范围内声明的名称将隐藏外部范围中具有相同名称的任何内容。