std::string
有一个成员函数 swap
,它是交换两个大字符串的有效方法。
现在我们有了 move 语义,因此,给定两个大字符串 s1
和 s2
,以下代码
s1.swap(s2);
在效率方面应与以下代码相同:
std::swap(s1, s2);
string::swap
可以忽略吗?
最佳答案
Is
string::swap
ignorable?
如果您愿意,您可以选择忽略它,并始终调用非成员(member)swap
;效果与调用 string::swap
相同,因为 basic_string
的 swap
特化是根据成员函数描述的。
§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/