Namespaces
Variants

Strings library

From cppreference.net

目录

字符

在C++标准库中, 字符 是一种按顺序处理时可表示文本的对象。

该术语不仅指 字符类型 的对象,还包括能通过满足字符串库及后续库规范定义的类型所表示的任意值:

(since C++11)

在字符串库 和正则表达式库 (自 C++11 起) 中,字符只能是 类字符类型 ,即满足以下要求的非数组类型: PODType (直至 C++20) TrivialType StandardLayoutType (自 C++20 起) (直至 C++26) TriviallyCopyable StandardLayoutType (自 C++26 起)

对于任何字符类型 T std:: is_trivially_default_constructible_v < T > true

(since C++26)

因此,在字符串库 和正则表达式库 (since 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 (since 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 文档 关于 字符串库