名稱空間
變體
操作

字串庫

來自 cppreference.com
< cpp

目錄

[編輯] 字元

在 C++ 標準庫中,一個字元是一個物件,當按順序處理時,可以表示文字。

這個術語不僅指字元型別的物件,也指任何可以由提供字串庫和以下庫中指定定義的型別表示的值

(C++11 起)

在字串庫和正則表示式庫中(C++11 起),字元只能是類字元型別,即那些滿足PODType(直到 C++20)TrivialTypeStandardLayoutType(C++20 起)(直到 C++26)TriviallyCopyableStandardLayoutType(C++26 起)要求的非陣列型別。

對於任何類字元型別 Tstd::is_trivially_default_constructible_v<T>true

(C++26 起)

因此,字元在字串庫和正則表示式庫中(C++11 起)也被稱為類字元物件

一些標準庫元件接受字元容器型別。它們也是用於表示單個字元的型別。這些型別用於 std::char_traits 的一個模板引數,以及使用 std::char_traits 的類模板。

[編輯] 庫元件

C++ 字串庫包含以下元件

[編輯] 字元特性

許多與字元相關的類模板(例如 std::basic_string)需要一組相關的型別和函式來完成其語義的定義。這些型別和函式作為模板引數 Traits 中一系列成員 typedef 名稱和函式的集合提供,每個此類模板都使用此引數。能夠完成這些語義的類是 CharTraits

字串庫提供了類模板 std::char_traits,它為 std::basic_stringstd::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_stringstd::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 文件 關於 字串庫