std:: basic_string_view
|
定义于头文件
<string_view>
|
||
|
template
<
class
CharT,
|
(C++17 起) | |
类模板
basic_string_view
描述了一个对象,该对象能够引用一个常量连续
CharT
序列,该序列的首元素位于零位置。
对于
basic_string_view
str
,当操作使范围
[
str.
data
(
)
,
str.
data
(
)
+
str.
size
(
)
)
中的指针失效时,指向
str
元素的指针、迭代器和引用也将失效。
|
|
(C++23 起) |
提供了多种常见字符类型的类型定义:
|
定义于头文件
<string_view>
|
|
| 类型 | 定义 |
| std::string_view (C++17) | std :: basic_string_view < char > |
| std::wstring_view (C++17) | std :: basic_string_view < wchar_t > |
| std::u8string_view (C++20) | std :: basic_string_view < char8_t > |
| std::u16string_view (C++17) | std :: basic_string_view < char16_t > |
| std::u32string_view (C++17) | std :: basic_string_view < char32_t > |
目录 |
模板参数
| CharT | - | 字符类型 |
| Traits | - |
CharTraits
类,用于指定字符类型的操作。与
std::basic_string
类似,
Traits::char_type
必须与
CharT
为同一类型,否则程序非良构。
|
嵌套类型
| 类型 | 定义 | ||||
traits_type
|
Traits
|
||||
value_type
|
CharT
|
||||
pointer
|
CharT * | ||||
const_pointer
|
const CharT * | ||||
reference
|
CharT & | ||||
const_reference
|
const CharT & | ||||
const_iterator
|
实现定义的常量
LegacyRandomAccessIterator
,
其
|
||||
iterator
|
const_iterator
|
||||
const_reverse_iterator
|
std:: reverse_iterator < const_iterator > | ||||
reverse_iterator
|
const_reverse_iterator
|
||||
size_type
|
std::size_t | ||||
difference_type
|
std::ptrdiff_t |
注意:
iterator
和
const_iterator
是相同类型,因为字符串视图是对常量字符序列的视图。
对
容器
迭代器类型的所有要求同样适用于
basic_string_view
的
iterator
和
const_iterator
类型。
数据成员
| 成员 | 描述 |
const_pointer
data_
|
指向底层序列的指针
( 仅用于说明的成员对象* ) |
size_type
size_
|
字符数量
( 仅用于说明的成员对象* ) |
成员函数
构造函数与赋值操作 |
|
构造
basic_string_view
(公开成员函数) |
|
|
赋值视图
(公开成员函数) |
|
迭代器 |
|
|
返回指向起始位置的迭代器
(公开成员函数) |
|
|
返回指向末尾位置的迭代器
(公开成员函数) |
|
|
返回指向起始位置的反向迭代器
(公开成员函数) |
|
|
返回指向末尾位置的反向迭代器
(公开成员函数) |
|
元素访问 |
|
|
访问指定字符
(公开成员函数) |
|
|
带边界检查访问指定字符
(公开成员函数) |
|
|
访问首字符
(公开成员函数) |
|
|
访问末字符
(公开成员函数) |
|
|
返回指向视图首字符的指针
(公开成员函数) |
|
容量 |
|
|
返回字符数量
(公开成员函数) |
|
|
返回最大字符数
(公开成员函数) |
|
|
检查视图是否为空
(公开成员函数) |
|
修改器 |
|
|
通过前移起始位置缩小视图
(公开成员函数) |
|
|
通过后移结束位置缩小视图
(公开成员函数) |
|
|
交换内容
(公开成员函数) |
|
操作 |
|
|
复制字符
(公开成员函数) |
|
|
返回子串
(公开成员函数) |
|
|
比较两个视图
(公开成员函数) |
|
|
(C++20)
|
检查字符串视图是否以给定前缀开头
(公开成员函数) |
|
(C++20)
|
检查字符串视图是否以给定后缀结尾
(公开成员函数) |
非成员函数
|
(C++17)
(removed in C++20)
(removed in C++20)
(removed in C++20)
(removed in C++20)
(removed in C++20)
(C++20)
|
按字典序比较两个字符串视图
(函数模板) |
输入/输出 |
|
|
(C++17)
|
对字符串视图执行流输出操作
(函数模板) |
字面量
|
定义于内联命名空间
std::literals::string_view_literals
|
|
|
(C++17)
|
从字符数组字面量创建 string view
(函数) |
辅助类
|
(C++17)
(C++17)
(C++20)
(C++17)
(C++17)
|
字符串视图的哈希支持
(类模板特化) |
辅助模板
|
template
<
class
CharT,
class
Traits
>
inline
constexpr
bool
|
(C++20 起) | |
此对
ranges::enable_borrowed_range
的特化使
basic_string_view
满足
borrowed_range
的要求。
|
template
<
class
CharT,
class
Traits
>
inline
constexpr
bool
|
(C++20 起) | |
此
ranges::enable_view
的特化使
basic_string_view
满足
view
概念。
推导指引 |
(C++20 起) |
注释
程序员有责任确保
std::string_view
不会比其所指向的字符数组更长寿:
std::string_view good{"a string literal"}; // "良好"情况:`good`指向静态数组 // 字符串字面量驻留在持久数据存储中 std::string_view bad{"a temporary string"s}; // "不良"情况:`bad`持有悬空指针,因为由std::operator""s创建的 // std::string临时对象将在语句结束时被销毁
在 C++23 引入正式要求之前,
std::basic_string_view
的特化在所有现有实现中早已是平凡可复制类型。
| 功能测试 宏 | 值 | 标准 | 功能特性 |
|---|---|---|---|
__cpp_lib_string_view
|
201606L
|
(C++17) |
std::string_view
|
201803L
|
(C++20) | ConstexprIterator | |
__cpp_lib_string_contains
|
202011L
|
(C++23) |
contains
|
示例
输出:
▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─ ▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─ ▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄ ▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀ ▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─ ▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─ ▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄ ▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 适用范围 | 发布时行为 | 正确行为 |
|---|---|---|---|
| LWG 3203 | C++17 |
仅从
basic_string_view
成员函数返回的
指针、迭代器和引用可能失效 |
所有指向
basic_string_view
元素的
指针、迭代器和引用均可能失效 |
参见
|
存储并操作字符序列
(类模板) |
|
|
连接两个字符串、字符串与
char
,或字符串与
string_view
(函数模板) |
|
|
(C++20)
|
对连续对象序列的非拥有视图
(类模板) |
|
(C++11)
|
引用在
列表初始化
中创建的临时数组
(类模板) |