C++ string到底是什么


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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM