读书人

函数名称查找ADL的一个有关问题,和小弟

发布时间: 2012-06-06 16:44:11 作者: rapoo

函数名称查找ADL的一个问题,和我预想的不太一样.
下面这段代码是从网上摘下来的的,我自己做了一点修改。在名称空间X里面加入了一个我的函数f。我本来期待f(N::)的时候调用的是我的函数,但是还是调用的N::里面的f

C/C++ code
namespace X{    template<typename T> void f(T);    void f(int){ // 我新加的函数,为什么没有匹配?        std::cout << "X::f\n";    }}namespace N{    using namespace X;    enum E { e1 };    void f(E){         std::cout << "N::f(N::E) called\n";     }}void f(int){     std::cout << "::f(int) called\n"; }int main(){    ::f(N::e1);  // qualified function name: no ADL    f(N::e1);    // ordinary lookup finds ::f() and ADL finds N::f(),}                //  the latter is preferred

奇怪的是,既然ADL按照限定名-->类型-->函数参数的名称空间的优先顺序来查找,那么既然N包含了X,为什么不能匹配X::f?


[解决办法]
1,哪里出现过X的调用?

2,
template<typename T> void f(T);
void f(int){ // 我新加的函数,为什么没有匹配?

读书人网 >C++

热点推荐