字串函式庫
目錄 |
[編輯] 字元
在 C++ 標準函式庫中,字元 (character) 是一個物件,當它被連續處理時,可以用來表示文字。
此術語不僅指 字元型別 的物件,也包含任何能由提供字串函式庫及下列函式庫所定義之規範的型別所表示的值:
| (C++11 起) |
在字串函式庫及正規表示式函式庫(C++11 起)中,字元只能是 類字元型別 (char-like types),即那些滿足 PODType(C++20 前)TrivialType 與 StandardLayoutType(C++20 起)(C++26 前)TriviallyCopyable 與 StandardLayoutType(C++26 起) 要求之非陣列型別。
|
對於任何類字元型別 |
(C++26 起) |
因此,在字串函式庫與正規表示式函式庫(C++11 起)中,字元也被稱為 類字元物件 (char-like objects)。
某些標準函式庫元件接受 字元容器型別 (character container types)。這些同樣是代表單一字元的型別。此類型別用於 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 起) 所需的型別與函式。
定義了以下特例化 (specializations),它們皆滿足 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++ 標準。
| DR | 應用於 | 出版時的行為 | 正確的行為 |
|---|---|---|---|
| LWG 1170 | C++98 | 類字元型別本可以是陣列型別 | 禁止 |
[編輯] 參見
| C 文件 關於 字串函式庫
|