由于std :: swap(s1,s2)就足够了,string :: swap是否可以忽略?

时间:2014-06-26 15:56:53

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

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

既然我们有移动语义,那么,给定两个大字符串s1s2,以下代码

s1.swap(s2);

在效率方面,

应与以下代码相同:

std::swap(s1, s2);

string::swap是否可以忽略?

2 个答案:

答案 0 :(得分:2)

  

string::swap是否可以忽略?

如果您愿意,可以选择忽略它,并且始终呼叫非会员swap;效果与调用string::swap相同,因为swap的{​​{1}}专门化是根据成员函数描述的。

§21.4.8.8[string.special]

basic_string
     

1 效果:等同于 template<class charT, class traits, class Allocator> void swap(basic_string<charT,traits,Allocator>& lhs, basic_string<charT,traits,Allocator>& rhs);

我个人的意见是逐案评估选项,并使用哪一个似乎更适合特定场合。

答案 1 :(得分:1)

弃用任何或多或少是一个失败的原因。对于向后兼容性,编译器供应商无法真正摆脱任何东西 - 或者有价值的客户肯定会抱怨。