本文是看了《Effective c++》 的条款25的总结部分,想看原版的老爷们,去找本ebook看就好了
首先,如果swap的缺省实现的代码(tmp=a;a=b;b=tmp;)对自定义的class或者class template提供可接受的效率,不需要额外做任何事。
如果swap缺省实现版的效率不足,可以参考一下步骤:
1. 提供一个public 的swap成员函数,让它高效的实现置换自定义类型的两个对象的值
2. 在class或者template所在的命名空间内提供一个non-member swap,并令其调用步骤1当中的swap成员函数
3. 如果是class而非template,可以实现一个std::swap的一个特化版本
最后,如果调用swap,需要在之前添加一个using std::swap; 语句,方便让std::swap在自定义的namespace当中获得曝光,然后不加任何修饰符,调用swap,这样执行的时候,就会先在当前命名空间去寻找swap实现,然后找std::swap的特化版本,最后使用swap,保证不漏,且效率递减
阅读(1821) | 评论(0) | 转发(0) |