就像我们可以在命名空间中声明并在全局命名空间中定义一样,像这样:
namespace B{
void func();
}
void B::func(){
std::cout<<"abcdef\n";
}
int main(){
B::func();
}
我们必须使用它来调用它,B::
因为它是在 B 命名空间中声明的,这是根据Forward declaring classes in namespaces的答案。
void func();
namespace B{
void ::func(){
}
}
using namespace B;
int main(){
func();
}
根据这些答案,我们不能这样做,因为编译器不知道定义在哪里。
可以安全地说“全局命名空间是特殊的,因为编译器总是检查它,这就是为什么在全局命名空间中定义它是安全的。”?
我们可以做一些事情来使用户定义的命名空间与全局命名空间一样特殊,或者做一些事情来让编译器知道定义是“here!!”吗?