字符串库
目录 |
[编辑] 字符
在 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 文档 关于 字符串库
|