字符串库
目录 |
[编辑]字符
在 C++ 标准库中,字符 是在按顺序处理时可以表示文本的对象。
此术语不限于字符类型的对象,也包括提供了字符串库和以下库中指定的定义的类型可以表示的任意值:
(C++11 起) |
在字符串库和正则表达式库(C++11 起)中,字符只能具有字符式类型,即满足简旧数据类型(PODType) (C++20 前)平凡类型(TrivialType) 和标准布局类型(StandardLayoutType) (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 文档 |