std::swap()`在排序甚至赋值期间被许多 std 容器(例如`std::list`and )使用。`std::vector
但是 std 的实现swap()非常笼统,对于自定义类型来说效率很低。
swap()
因此,可以通过重载std::swap()自定义类型特定的实现来获得效率。但是如何实现它以便 std 容器使用它呢?
std::swap()
重载std::swap实现(也就是专门化它)的正确方法是将它写在与你交换的相同的命名空间中,以便可以通过参数相关查找(ADL)找到它。一件特别容易做的事情是:
std::swap
class X { // ... friend void swap(X& a, X& b) { using std::swap; // bring in swap for built-in types swap(a.base1, b.base1); swap(a.base2, b.base2); // ... swap(a.member1, b.member1); swap(a.member2, b.member2); // ... } };