小编典典

如何重载 std::swap()

all

std::swap()`在排序甚至赋值期间被许多 std 容器(例如`std::list`and )使用。`std::vector

但是 std 的实现swap()非常笼统,对于自定义类型来说效率很低。

因此,可以通过重载std::swap()自定义类型特定的实现来获得效率。但是如何实现它以便 std 容器使用它呢?


阅读 91

收藏
2022-04-04

共1个答案

小编典典

重载std::swap实现(也就是专门化它)的正确方法是将它写在与你交换的相同的命名空间中,以便可以通过参数相关查找(ADL)找到它。一件特别容易做的事情是:

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);
        // ...
    }
};
2022-04-04