命名空间
变体
操作

字符串库

来自 cppreference.com
< cpp

内容

[编辑] 字符

在 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_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 等)

类模板 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>
(自 C++17 起)

[编辑] 以空字符结尾的序列实用程序

以空字符结尾的字符序列 (NTCTS) 是以空字符(值初始化 后的值)结尾的字符序列。

字符串库提供函数来创建、检查和修改此类序列

[编辑] 相关库

本地化库 提供字符串转换的支持(例如 std::wstring_convertstd::toupper),以及用于对字符进行分类的函数(例如 std::isspacestd::isdigit)。

[编辑] 缺陷报告

以下行为变更缺陷报告已追溯应用到以前发布的 C++ 标准。

DR 应用于 已发布的行为 正确行为
LWG 1170 C++98 类似字符的类型可以是数组类型 禁止

[编辑] 另请参阅

C 文档 针对 字符串库