mmxingye

导航

01 | C++ADL(依赖于参数的查询)

namespace MyNamespace
{
    class MyClass {};
    void doSomething(MyClass);
}

MyNamespace::MyClass obj; // global object


int main()
{
    doSomething(obj); // Works Fine - MyNamespace::doSomething() is called.
}

在上面的示例中,既没有使用using声明也没有使用using指令,但是编译器仍然可以通过应用Koenig查找将正确的不合格名称doSomething()识别为在名称空间MyNamespace中声明的函数。

该算法告诉编译器不仅要查看本地作用域,还要查看包含参数类型的名称空间。因此,在上面的代码中,编译器发现对象obj(它是函数doSomething()的参数)属于命名空间MyNamespace。因此,它将查看该命名空间以找到doSomething()的声明。

posted on 2023-04-10 15:47  独立树  阅读(19)  评论(0编辑  收藏  举报