希望我不是在问一个愚蠢的问题。我确实在谷歌中搜索过,但找不到太多信息。
我从 Herb Sutter 的 Exceptional C++ Book Item 31 中引用了以下简单代码:
namespace NS
{
class T{};
void f(T);
}
void f(NS::T);
int main()
{
NS::T params;
f(params);
}
当我编译它时:
prog.cpp:在函数'int main()'中:
prog.cpp:12:13:错误:重载'f(NS :: T&)'的调用不明确
prog.cpp:12:13:注意:候选人是:
prog.cpp:8:6: 注意: void f(NS::T)
prog.cpp:4:10: 注意: void NS::f(NS::T)
我知道这是因为依赖于参数的查找f
。编译器找到了两个版本f
,一个在全局命名空间中,一个在NS
命名空间中。
我的问题是:
在多个命名空间中搜索名称时是否有任何顺序?
是否应该总是先搜索封闭的命名空间,然后再搜索全局命名空间?
如果是这种情况,如果我们已经在命名空间中找到了匹配项,为什么仍然存在歧义
NS
?
如果我的问题不清楚,请随时纠正我。
谢谢你。