4.5.4 特化ADL可找到的swap
依然使用刚才的point类,但这次我们不变动std名字空间,而是在全局名字空间内实现swap函数:
- //gloabl namespace
- void swap(point &x, point &y)
- {x.swap(y);}
- int main()
- {
- point a(1,2,3), b(4,5,6);
- cout << "std::swap" << endl;
- std::swap(a,b);
- cout << "boost::swap" << endl;
- boost::swap(a, b);
- }
程序运行结果如下:- std::swap
- boost::swap
- inner swap
这段代码的运行结果与之前的特化std::swap有明显不同,std::swap使用了标准的交换操作,而boost::swap通过ADL规则找到了全局名字空间的特化交换函数,实现了高效的交换。
如果读者担心在全局名字空间编写自由函数swap会造成名字"污染",也可以把特化的swap加入到boost名字空间,或者其他ADL可以找到的名字空间。