string的声明为:
typedef basic_string<char, char_traits<char>, allocator<char>> string;
从定义来看,
string类型的本质是一个模板类,是basic_string<char, char_traits<char>,allocator<char>>的“简称”。接着看basic_string的定义:
template < class charT, //定义字符串中字符的类型
class traits = char_traits<charT>, // basic_string::traits_type
class Alloc =allocator<charT> // basic_string::allocator_type
> class basic_string;
具体来讲,std::string的实现过程如下:
1) 用基本类型char实例化类模板basic_string,得到一个具体的模板类;
2) 将得到的模板类实例typedef为string。
因此,直观地理解,string是一个实例对象是为char序列的模板类,自带了多封装好的针,可以实现对自身进行操作。
由于是模板类,因此很容易理解,std::basic_string除了std::string,还有其它实例,比如std::wstring, 其定义如下:
typedefbasic_string<wchar_t, char_traits<wchar_t>,allocator<wchar_t>> wstring;
模板的三个参数介绍如下:
① charT 基本数据类型
② char_traits [1]
声明:template <class charT> struct char_traits;
作用:指定了字符的属性,并且提供了作用在字符或字符序列上的某些操作的特定语义。
③ allocator [2]分配器
声明:template <class T> class allocator;//<memory>头文件下allocator:
作用:定义用于标准库的部分内容,特别是STL的内存模型。
[1] Character traits classes specifycharacter properties and provide specific semantics for certain operations oncharacters and sequences of characters.(http://www.cplusplus.com/reference/string/char_traits/)
[2] Allocators are classes that definememory models to be used by some parts of the Standard Library, and mostspecifically, by STL containers.(http://www.cplusplus.com/reference/memory/allocator/?kw=allocator)