命名空间
变体
操作

字符串库

来自 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++ 标准。

缺陷报告 应用于 发布时的行为 正确的行为
LWG 1170 C++98 类字符类型可能是数组类型 已禁止

[编辑] 另请参阅

C 文档 关于 字符串库