什么是C ++中的“依赖于参数的查找”(“ Koenig查找”)?

依赖参数的查找(ADL)是一种用于在函数调用表达式中查找不合格函数名称的协议。

这些函数调用表达式包括对重载运算符的隐式函数调用。

除了通常的非限定名称查找所考虑的范围和命名空间之外,还在其参数的命名空间中查找函数名称。依赖于参数的查找使使用在不同命名空间中定义的运算符成为可能。 

示例

namespace MyNamespace{
   class A {};
   void f( A &a, int i) {}
}
int main() {
   MyNamespace::A a;
   f( a, 0 );    //calls MyNamespace::f
}

对f的函数调用的查找取决于参数a。当我们使用诸如cout,cin,endl等之类的东西时,同样的情况也适用于在标准命名空间中查找的参数<<和>>。