相关疑难解决方法(0)

什么是"Argument-Dependent Lookup"(又名ADL或"Koenig Lookup")?

什么是关于什么参数依赖查找的好解释?很多人也称它为Koenig Lookup.

我最好知道:

  • 为什么这是好事?
  • 为什么这是一件坏事?
  • 它是如何工作的?

c++ c++-faq name-lookup argument-dependent-lookup

163
推荐指数
4
解决办法
3万
查看次数

ADL的缺陷是什么?

前段时间我读了一篇文章解释了参数依赖查找的几个缺陷,但我再也找不到了.它是关于获取您不应该访问的东西或类似的东西.所以我想我会在这里问:ADL的缺陷是什么?

c++ namespaces overload-resolution argument-dependent-lookup

50
推荐指数
2
解决办法
4053
查看次数

具有类参数的函数是否从命名空间泄露?

我在这里有一小段代码供您考虑,这让我感到非常困惑.奇怪的是,它在Sun Studio和GCC上编译,即使我认为它不应该.

考虑一下:

namespace name
{
  class C
    {
      int a;
    };

  void f(C c);
  void g(int a);
}

int main(int argc, char** argv)
{
  name::C c;

  name::f(c); 
  f(c);  // <--- this compiles, strangely enough

  name::g(42);
  // g(42);  <--- this does not, as I expected
}
Run Code Online (Sandbox Code Playgroud)

来自同一命名空间的类参数会导致函数f"泄漏"到命名空间之外,并且无需访问name::.

有人对此有解释吗?这当然是我而不是编译器在这里错了.

c++ namespaces argument-dependent-lookup

22
推荐指数
3
解决办法
943
查看次数

为什么发明了依赖于参数的查找?

为什么发明了依赖于参数的查找(ADL)?是这样我们可以写cout << stuff而不是std::operator<<(cout, stuff)?如果是这种情况,为什么ADL不限于运营商而不是所有功能?

如果C++有其他方法来执行内置和用户定义类型的通用输出,例如类型安全的printf可变参数模板,是否可以防止引入ADL ?

c++ history argument-dependent-lookup

9
推荐指数
3
解决办法
1207
查看次数