【发布时间】:2013-05-19 07:00:27
【问题描述】:
希望我不是在问一个愚蠢的问题。我确实在 Google 中搜索过,但找不到太多信息。
我引用了 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命名空间中找到匹配项,为什么仍然存在歧义?
如果我的问题不清楚,请随时纠正我。
谢谢。
【问题讨论】:
-
有些相关 - 仅当搜索在第一个匹配时停止时,顺序才相关。
标签: c++ namespaces