字串庫
目錄 |
[編輯] 字元
在 C++ 標準庫中,一個字元是一個物件,當按順序處理時,可以表示文字。
這個術語不僅指字元型別的物件,也指任何可以由提供字串庫和以下庫中指定定義的型別表示的值
(C++11 起) |
在字串庫和正則表示式庫中(C++11 起),字元只能是類字元型別,即那些滿足PODType(直到 C++20)TrivialType 和 StandardLayoutType(C++20 起)(直到 C++26)TriviallyCopyable 和 StandardLayoutType(C++26 起)要求的非陣列型別。
對於任何類字元型別 |
(C++26 起) |
因此,字元在字串庫和正則表示式庫中(C++11 起)也被稱為類字元物件。
一些標準庫元件接受字元容器型別。它們也是用於表示單個字元的型別。這些型別用於 std::char_traits 的一個模板引數,以及使用 std::char_traits 的類模板。
[編輯] 庫元件
C++ 字串庫包含以下元件
[編輯] 字元特性
許多與字元相關的類模板(例如 std::basic_string)需要一組相關的型別和函式來完成其語義的定義。這些型別和函式作為模板引數 Traits
中一系列成員 typedef 名稱和函式的集合提供,每個此類模板都使用此引數。能夠完成這些語義的類是 CharTraits。
字串庫提供了類模板 std::char_traits,它為 std::basic_string和 std::basic_string_view(C++17 起)定義了型別和函式。
定義了以下特化,它們都滿足 CharTraits 要求
定義於標頭檔案 <string> |
||
template<> class char_traits<char>; |
||
template<> class char_traits<wchar_t>; |
||
template<> class char_traits<char8_t>; |
(C++20 起) | |
template<> class char_traits<char16_t>; |
(C++11 起) | |
template<> class char_traits<char32_t>; |
(C++11 起) | |
當對 std::basic_string和 std::basic_string_view(C++17 起)使用使用者定義的字元容器型別時,也需要提供相應的字元特性類(可以是 std::char_traits 的特化)。
[編輯] 字串類(std::string 等)
類模板 std::basic_string 概括了字元序列的操縱和儲存方式。字串的建立、操縱和銷燬都由一套方便的類方法和相關函式處理。
為常用型別提供了 std::basic_string 的幾種特化
定義於標頭檔案
<string> | |
型別 | 定義 |
std::string
|
std::basic_string<char> |
std::wstring
|
std::basic_string<wchar_t> |
std::u8string (C++20 起) |
std::basic_string<char8_t> |
std::u16string (C++11 起) |
std::basic_string<char16_t> |
std::u32string (C++11 起) |
std::basic_string<char32_t> |
[編輯] 字串檢視類(std::string_view 等) (C++17 起)
類模板 std::basic_string_view 提供了一個輕量級物件,透過類似於 std::basic_string 的介面,提供對字串或字串部分的只讀訪問。
為常用型別提供了 std::basic_string_view 的幾種特化
定義於標頭檔案
<string_view> | |
型別 | 定義 |
std::string_view
|
std::basic_string_view<char> |
std::wstring_view
|
std::basic_string_view<wchar_t> |
std::u8string_view (C++20 起) |
std::basic_string_view<char8_t> |
std::u16string_view
|
std::basic_string_view<char16_t> |
std::u32string_view
|
std::basic_string_view<char32_t> |
[編輯] 相關庫
文字處理庫提供了對本地化、字串轉換(例如 std::toupper)、字元分類函式(例如 std::isspace)和文字編碼識別(std::text_encoding)的支援。
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 1170 | C++98 | 類字元型別可能是陣列型別 | 已禁止 |
[編輯] 另請參閱
C 文件 關於 字串庫
|