命名空间
变体
操作

字符串库

来自 cppreference.cn
< cpp

目录

[编辑] 字符

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

该术语不仅指字符类型的对象,还指可以通过提供字符串库和以下库中指定的定义的类型来表示的任何值

(始于 C++11)

在字符串库 和正则表达式库(始于 C++11)中,字符只能是类字符类型,即,满足 PODType(截至 C++20)TrivialTypeStandardLayoutType(始于 C++20)(截至 C++26)TriviallyCopyableStandardLayoutType(始于 C++26)的要求的那些非数组类型。

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

(始于 C++26)

因此,在字符串库 和正则表达式库(始于 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 等) (始于 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++ 标准。

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

[编辑] 参见

C 文档 关于 字符串库