std::string
有一个成员函数swap
,它是交换两个大字符串的有效方法。
既然我们有移动语义,那么,给定两个大字符串s1
和s2
,以下代码
s1.swap(s2);
应与以下代码相同:
std::swap(s1, s2);
string::swap
是否可以忽略?
答案 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)
弃用任何或多或少是一个失败的原因。对于向后兼容性,编译器供应商无法真正摆脱任何东西 - 或者有价值的客户肯定会抱怨。