a = a + b用的是非成员函数
template <class _CharT, class _Traits, class _Alloc>
inline basic_string<_CharT,_Traits,_Alloc>
operator+(const basic_string<_CharT,_Traits,_Alloc>& __x,
const basic_string<_CharT,_Traits,_Alloc>& __y)
{
typedef basic_string<_CharT,_Traits,_Alloc> _Str;
typedef typename _Str::_Reserve_t _Reserve_t;
_Reserve_t __reserve;
_Str __result(__reserve, __x.size() + __y.size(), __x.get_allocator());
__result.append(__x);
__result.append(__y);
return __result;
}
其通过中间字符串__result,追加__x,__y,最后通过拷贝构造函数赋值给a
a += b使用的是成员方法
basic_string& operator+=(const basic_string& __s) { return append(__s); }
append最终是调用
template <class _InputIterator>
basic_string<_Tp, _Traits, _Alloc>&
basic_string<_Tp, _Traits, _Alloc>::append(_InputIterator __first,
_InputIterator __last,
input_iterator_tag) {
for ( ; __first != __last ; ++__first)
push_back(*__first);
return *this;
}
?返回的是对象引用a
综合上面实现可以发现a += b效率高
|