如何判断是否应该使用
my_type bar;
using some_namespace::foo;
foo(bar);
而不是
some_namespace::foo(bar);
调用我的函数foo
时(不在我的直接范围内)?是否有一个通用的“规则”来确定是否应该使用ADL?我应该“默认”使用哪一个?
答案 0 :(得分:1)
那不是ADL。在两个示例中,foo
都是通过正常查找找到的。使用ADL的示例如下:
namespace ns {
class A { };
void f(A) { };
}
int main() {
f(A());
}
此处,f
未通过正常查找找到,但是通过参数依赖查找找到它(因为它位于名称空间ns
旁边A
)。无论如何......
尽可能避免使用ADL。
ADL在某些特定场景中是有益的,例如对于运营商重载和可交换概念。但是,它应该谨慎使用,因为在许多其他情况下它会导致bizarre, unexpected behavior。