CppCoreGuidelines C.83 对于值类型,考虑提供 noexcept 的 swap 函数
14 November 2022
C.83: For value-like types, consider providing a noexcept swap function
理由
swap
可用来方便的实现多种常用操作,比如快速地移动对象,赋值操作。 swap
能够确保功能的确定性,减少代码调用错误。
在拷贝构造函数中考虑使用 swap
实现赋值操作。
例子
class Foo { public: void swap(Foo& rhs) noexcept { m1.swap(rhs.m1); std::swap(m2, rhs.m2); } private: Bar m1; int m2; };
在你自定义类的名字空间下实现一个非成员的 swap
函数可以方便函数调用使用。
void swap(Foo& a, Foo& b) { a.swap(b); }
强化
- 可拷贝类型须提供一个
swap
成员函数或外部的swap
函数重载 - (简单)当一个类有
swap
成员函数时,应该声明为noexcept