在这里,我编写了一个代码片段,以查看将调用哪个swap
,但结果都不是。什么都没有输出。
#include<iostream>
class Test {};
void swap(const Test&lhs,const Test&rhs)
{
std::cout << "1";
}
namespace std
{
template<>
void swap(const Test&lhs, const Test&rhs)
{
std::cout << "2";
}
/* If I remove the const specifier,then this will be called,but still not the one in global namespace,why?
template<>
void swap(Test&lhs, Test&rhs)
{
std::cout << "2";
}
*/
}
using namespace std;
int main()
{
Test a, b;
swap(a, b);//Nothing outputed
return 0;
}
哪个swap
被称为?在另一种情况下,为什么没有swap
说明符的专用const
被调用,而不是::swap
?
答案 0 :(得分:13)
std::swap()
类似[ref]
template< class T >
void swap( T& a, T& b );
这是比你的
更好的匹配void swap(const Test& lhs, const Test& rhs);
的
swap(a, b);
a
和b
非常量 。因此调用std::swap()
,不输出任何内容。
请注意std::swap()
由于using namespace std;
而参与重载解析。