美文网首页Exceptional C++
【Exceptional C++(17)】名称搜索

【Exceptional C++(17)】名称搜索

作者: downdemo | 来源:发表于2018-01-30 10:02 被阅读2次

    问题

    • 下面代码调用的是哪个函数
    namespace A {
        struct X;
        struct Y;
        void f(int);
        void g(X);
    }
    namespace B {
        void f(int i) { 
            f(i); // 1
        }
        void g(A::X x) {
            g(x); // 2
        }
        void h(A::Y y) {
            h(y); // 3
        }
    }
    

    解答

    • 1调用的是它自己,并且是无穷递归,因为B没有using namespace A或using A::f,如果写了,将在A::f(int)和B::f(int)间造成二义性
    • 2调用则会造成二义性,Koenig Lookup(简化版)规定如果给函数提供一个class类型实参,在名称搜索时编译器将认为包含实参类型的命名空间中的同名函数为可选函数
    • 3调用的是它自己,也是无穷递归,因为没有其他的h(A::Y)函数

    相关文章

      网友评论

        本文标题:【Exceptional C++(17)】名称搜索

        本文链接:https://www.haomeiwen.com/subject/uipqzxtx.html