我认为public void () {
//calculations
System.out.println("formatted response");
}
的要点是,如果我们交换某个类,交换将搜索该类所定义的名称空间,否则它将使用std :: swap.so,因此我编写了一些代码对其进行测试。
using std::swap
但是结果使我感到困惑。它直接使用std :: swap,有人可以解释原因吗?
更新
如果函数寻找更好的匹配,为什么下面的代码输出“ inside”,看起来像使用声明隐藏了全局foo,这是更好的匹配
namespace np{
class myclass{
...
};
void swap(const myclass&lhs,const myclass&rhs){
cout<<"np::swap()"<<endl;
}
}
int main()
{
np::myclass m1,m2;
using std::swap;
swap(m1,m2);
}
答案 0 :(得分:3)
在重载解析中,您的swap
将与std::swap
相对,因为std::swap
将参数作为非const
的引用,而函数将其视为{{ 1}}引用,使匹配变得更糟。
只需删除参数中的const
,您的ADL重载将是首选。
实际上,使用const
参数的swap
函数反正没有多大意义。