C++ string到底是什麼?
要回答這個問題,先要了解什麼是basic_string。
看一下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;
可見,basic_string實質上是一個類模板。
再解釋的稍微詳細一些:
1.關於char_traits
聲明:
template <class charT> struct char_traits;
作用:
Character traits classes specify character properties and provide specific semantics for certain operations on characters and sequences of characters.(來自C++ Referencce,地址:http://www.cplusplus.com/reference/string/char_traits/)
即:它指定了字符的屬性,並且提供了作用在字符或字符序列上的某些操作的特定語義。
2.關於allocator
聲明:
template <class T> class allocator;//<memory>頭文件下 allocator:分配器
作用:
Allocators are classes that define memory models to be used by some parts of the Standard Library, and most specifically, by STL containers.(來自C++ Referencce,地址:http://www.cplusplus.com/reference/memory/allocator/?kw=allocator)
即:它定義了用於標准庫的部分內容,特別是STL的內存模型。
現在我們來看string的聲明:
typedef basic_string<char, char_traits<char>, allocator<char>> string;
現在,我們明白了,原來是這麼回事:
用基本類型char實例化類模板basic_string,得到一個具體的模板類,然後,將其typedef為string。
換句話說,string本質上是一個模板類,就是basic_string<char, char_traits<char>, allocator<char>>,string是對應的“簡稱”。 直觀地理解,string的實例對象(就是說 string str;中的str)是一個char序列,但不同於char* str,stingr str帶有許多封裝好的針對自己的操作。
ps:basic_string還有其它實例,比如說:
typedef basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t>> wstring;
------------------------------分割線------------------------------
C++ Primer Plus 第6版 中文版 清晰有書簽PDF+源代碼 http://www.linuxidc.com/Linux/2014-05/101227.htm
讀C++ Primer 之構造函數陷阱 http://www.linuxidc.com/Linux/2011-08/40176.htm
讀C++ Primer 之智能指針 http://www.linuxidc.com/Linux/2011-08/40177.htm
讀C++ Primer 之句柄類 http://www.linuxidc.com/Linux/2011-08/40175.htm
將C語言梳理一下,分布在以下10個章節中: