Fixes #9648, (string construction optimization)

This commit is contained in:
Ion Gaztañaga
2014-02-11 15:05:35 +01:00
parent edc4e6da80
commit ba596fc83c
2 changed files with 15 additions and 0 deletions

View File

@@ -932,6 +932,7 @@ use [*Boost.Container]? There are several reasons for that:
* Fixed bugs: * Fixed bugs:
* [@https://svn.boost.org/trac/boost/ticket/9338 #9338: ['"VS2005 compiler errors in swap() definition after including container/memory_util.hpp"]]. * [@https://svn.boost.org/trac/boost/ticket/9338 #9338: ['"VS2005 compiler errors in swap() definition after including container/memory_util.hpp"]].
* [@https://svn.boost.org/trac/boost/ticket/9648 #9648: ['"string construction optimization - char_traits::copy could be used ..."]].
[endsect] [endsect]

View File

@@ -1247,6 +1247,20 @@ class basic_string
basic_string& assign(size_type n, CharT c) basic_string& assign(size_type n, CharT c)
{ return this->assign(cvalue_iterator(c, n), cvalue_iterator()); } { return this->assign(cvalue_iterator(c, n), cvalue_iterator()); }
//! <b>Effects</b>: Equivalent to assign(basic_string(first, last)).
//!
//! <b>Returns</b>: *this
basic_string& assign(const CharT* first, const CharT* last)
{
size_type n = static_cast<size_type>(last - first);
this->reserve(n);
CharT* ptr = container_detail::to_raw_pointer(this->priv_addr());
Traits::copy(ptr, first, n);
this->priv_construct_null(ptr + n);
this->priv_size(n);
return *this;
}
//! <b>Effects</b>: Equivalent to assign(basic_string(first, last)). //! <b>Effects</b>: Equivalent to assign(basic_string(first, last)).
//! //!
//! <b>Returns</b>: *this //! <b>Returns</b>: *this