这是出现在“C++ Primer”第 5 节第 13.3 节中的相关代码:
void swap(Foo &lhs, Foo &rhs)
{
using std::swap;
swap(lhs.h, rhs.h); // uses the HasPtr version of swap
// swap other members of type Foo
}
书中提到了特定于类的交换没有被 using 声明隐藏的现象,并请读者参考 §18.2.3:
我阅读了该部分并意识到这可能与 Argument-Dependent Lookup (ADL) 有关。以下是节选:
但是我的理解还是有些模糊。我的问题是:ADL 是在正常范围查找之前进行还是在正常范围查找之后进行?我目前的理解是 ADL 在正常范围查找之前进行,否则它应该是使用的 std::swap 。如果您认为我是对的,我需要确认,或者如果您认为我错了,请指出我犯了什么错误。谢谢你。