c++ - 因为 std::swap(s1, s2) 就足够了,所以 string::swap 可以忽略吗?

标签 c++ c++11 swap move-semantics rvalue-reference

std::string 有一个成员函数 swap,它是交换两个大字符串的有效方法。

现在我们有了 move 语义,因此,给定两个大字符串 s1s2,以下代码

s1.swap(s2);

在效率方面应与以下代码相同:

std::swap(s1, s2);

string::swap 可以忽略吗?

最佳答案

Is string::swap ignorable?

如果您愿意,您可以选择忽略它,并始终调用非成员(member)swap;效果与调用 string::swap 相同,因为 basic_stringswap 特化是根据成员函数描述的。

§21.4.8.8 [字符串.特殊]

  template<class charT, class traits, class Allocator> void
  swap(basic_string<charT,traits,Allocator>& lhs,
       basic_string<charT,traits,Allocator>& rhs); 

1 Effects: Equivalent to lhs.swap(rhs);

我个人的意见是根据具体情况评估这些选项,并使用似乎更适合特定场合的选项。

关于c++ - 因为 std::swap(s1, s2) 就足够了,所以 string::swap 可以忽略吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24435161/

相关文章:

c++ - 使用 C++11 可变参数模板初始化 Enum To String Map

c++ - 为什么我们需要 remove_copy_if?

以函数作为模板参数的 C++ 函数调用包装器

map 和 multimap 之间的 C++ 模板特化

c++ - C++中cout的问题

jquery - 切换div的同名css jquery

c++ - 使用MFC时导出到excel文件

c++ - 不同的可变参数模板扩展

c++ - 为什么这个程序要交换值?

c++ - std::iter_swap 需要 ValueSwappable args vs std::swap 需要 Move Assignable args