← 模式

交换值

1234567891011#include <utility> #include <string> int main() { std::string s1 = "Hello"; std::string s2 = "World"; using std::swap; swap(s1, s2); }

此模式采用 CC0 公共领域贡献 许可。

要求 c++98 或更新版本。

意图

交换两个对象的值。

描述

第 6-7 行,我们创建了两个希望交换其值的 std::string 对象。不过,此模式也适用于任何其他可交换类型 (swappable type)

第 9 行,我们使用 using 声明 (using-declaration) 使 std::swap 可见,然后在 第 10 行,我们调用不带限定符的 swap(而不是 std::swap)来交换两个对象的值。这允许编译器通过实参依赖查找 (argument-dependent lookup, ADL) 找到用户为特定类型定义的 swap 特化版本,该版本可能会提供更高效的交换操作实现,然后再回退到通用的 std::swap 函数。当交换两个泛型对象时(例如在模板中),这种方法特别有用。

贡献者

  • Joseph Mansfield
  • Mark A. Gibbs

最后更新

2017年12月10日

来源

在 GitHub 上 Fork 此模式

分享