字符串库
内容 |
[编辑] 字符
在 C++ 标准库中,字符是对象,当按顺序处理时,可以表示文本。
该术语不仅指 字符类型 的对象,还指任何可以由提供字符串库和以下库中定义的类型表示的值。
(自 C++11 起) |
在字符串库和正则表达式库中(自 C++11 起),字符只能是类似字符类型,即那些也是 POD(直到 C++20)平凡的 标准布局(自 C++20 起) 类型的非数组类型。因此,字符在字符串库和正则表达式库中(自 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 等)类模板 std::basic_string_view 提供了一个轻量级对象,它使用类似于 std::basic_string 接口的接口,提供对字符串或字符串一部分的只读访问。 为常用的类型提供了 std::basic_string_view 的几个特化
|
(自 C++17 起) |
[编辑] 以空字符结尾的序列实用程序
以空字符结尾的字符序列 (NTCTS) 是以空字符(值初始化 后的值)结尾的字符序列。
字符串库提供函数来创建、检查和修改此类序列
- 以空字符结尾的字节字符串 (NTBS) 辅助函数(包括对 宽字符类型 的支持),
- 以空字符结尾的多字节字符串 (NTMBS) 辅助函数。
[编辑] 相关库
本地化库 提供字符串转换的支持(例如 std::wstring_convert 或 std::toupper),以及用于对字符进行分类的函数(例如 std::isspace 或 std::isdigit)。
[编辑] 缺陷报告
以下行为变更缺陷报告已追溯应用到以前发布的 C++ 标准。
DR | 应用于 | 已发布的行为 | 正确行为 |
---|---|---|---|
LWG 1170 | C++98 | 类似字符的类型可以是数组类型 | 禁止 |
[编辑] 另请参阅
C 文档 针对 字符串库
|