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
是相同类型,因为字符串视图是对常量字符序列的视图。
所有对
Container
迭代器类型的要求同样适用于
iterator
和
const_iterator
类型在
basic_string_view
中的使用。
数据成员
| 成员 | 描述 |
const_pointer
data_
|
指向底层序列的指针
( 仅用于说明的成员对象* ) |
size_type
size_
|
字符数量
( 仅用于说明的成员对象* ) |
成员函数
构造函数与赋值操作 |
|
构造
basic_string_view
(公开成员函数) |
|
|
赋值视图
(公开成员函数) |
|
迭代器 |
|
|
返回指向起始位置的迭代器
(公开成员函数) |
|
|
返回指向末尾的迭代器
(公开成员函数) |
|
|
返回指向起始位置的反向迭代器
(公开成员函数) |
|
|
返回指向末尾的反向迭代器
(公开成员函数) |
|
元素访问 |
|
|
访问指定字符
(公开成员函数) |
|
|
访问指定字符(带边界检查)
(公开成员函数) |
|
|
访问首字符
(公开成员函数) |
|
|
访问最后一个字符
(公开成员函数) |
|
|
返回指向视图首字符的指针
(公开成员函数) |
|
容量 |
|
|
返回字符数量
(公开成员函数) |
|
|
返回最大字符数量
(公开成员函数) |
|
|
检查视图是否为空
(公开成员函数) |
|
修饰符 |
|
|
通过前移起始位置来缩小视图范围
(公开成员函数) |
|
|
通过向后移动末尾来缩小视图
(公开成员函数) |
|
|
交换内容
(公开成员函数) |
|
操作 |
|
|
复制字符
(公开成员函数) |
|
|
返回子字符串
(公开成员函数) |
|
|
比较两个视图
(公开成员函数) |
|
|
(C++20)
|
检查字符串视图是否以给定前缀开头
(公开成员函数) |
|
(C++20)
|
检查字符串视图是否以给定后缀结尾
(公开成员函数) |
|
(C++23)
|
检查字符串视图是否包含给定的子串或字符
(公开成员函数) |
|
在视图中查找字符
(公开成员函数) |
|
|
查找子字符串的最后一次出现
(公开成员函数) |
|
|
查找字符首次出现的位置
(公开成员函数) |
|
|
查找字符的最后出现位置
(公开成员函数) |
|
|
查找首个不包含的字符
(公开成员函数) |
|
|
查找最后不包含的字符
(公开成员函数) |
|
常量 |
|
|
[static]
|
特殊值。具体含义取决于上下文
(公开静态成员常量) |
非成员函数
|
(C++17)
(C++20中移除)
(C++20中移除)
(C++20中移除)
(C++20中移除)
(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++ 标准。
| DR | 适用版本 | 发布行为 | 正确行为 |
|---|---|---|---|
| LWG 3203 | C++17 |
仅成员函数返回的指针、迭代器和引用
可能失效 |
所有指向
basic_string_view
元素的
指针、迭代器和引用均可能失效 |
另请参阅
|
存储和操作字符序列
(类模板) |
|
|
连接两个字符串、字符串与
char
或字符串与
string_view
(函数模板) |
|
|
(C++20)
|
对连续对象序列的非拥有视图
(类模板) |
|
(C++11)
|
引用在
列表初始化
中创建的临时数组
(类模板) |