C++ named requirements: CharTraits
CharTraits 是一个特征类,用于抽象给定字符类型的基本字符和字符串操作。大多数标准库字符串及输入/输出类在定义时,除了需要对应的字符模板类型参数外,还需要一个 CharTraits 模板类型参数。
目录 |
要求
以下列出的对 CharTraits 的任何操作均不得抛出异常。
给定
-
CharT,一种字符类型 -
X,用于类型CharT的 CharTraits 类型 -
c
,
d
,类型为
CharT的值 - p , q ,类型为 const CharT * 的值
-
s
,类型为
CharT*的值 - n , i , j ,类型为 std::size_t 的值
-
e
,
f
,类型为
X::int_type的值 -
pos
,类型为
X::pos_type的值 -
state
,类型为
X::state_type的值 -
r
,类型为
CharT的左值
类型
| 类型 | 语义 |
|---|---|
X::char_type
|
CharT
|
X::int_type
|
可容纳所有有效
X::char_type
值及
X
::
eof
(
)
的类型
|
X::off_type
|
当
X
作为输入/输出类的特征模板参数时,若非
std::streamoff
则引发实现定义行为
|
X::pos_type
|
|
X::state_type
|
可析构 、 可复制赋值 、 可复制构造 、 可默认构造 |
表达式
| 表达式 | 返回类型 | 语义 | 复杂度 |
|---|---|---|---|
| X :: eq ( c, d ) | bool | 返回:是否应将 c 视为与 d 相等 | 常数 |
| X :: lt ( c, d ) | bool | 返回:是否应将 c 视为小于 d | 常数 |
| X :: compare ( p, q, n ) | int |
返回:
|
线性 |
| X :: length ( p ) | std::size_t | 返回:使 X :: eq ( p [ i ] , CharT ( ) ) 为 true 的最小 i | 线性 |
| X :: find ( p, n, c ) | const X :: char_type * |
返回:
|
线性 |
| X :: move ( s, p, n ) |
X::char_type*
|
|
线性 |
| X :: copy ( s, p, n ) |
X::char_type*
|
|
线性 |
| X :: assign ( r, d ) | (未使用) | 赋值 r = d | 常数 |
| X :: assign ( s, n, c ) |
X::char_type*
|
|
线性 |
| X :: not_eof ( e ) |
X::int_type
|
返回:
|
常数 |
| <span class |
标准库
CharTraits 被以下标准库类模板作为模板类型参数所要求:
字符串 |
|
|
存储和操作字符序列
(类模板) |
|
|
(C++17)
|
只读字符串视图
(类模板) |
流 |
|
|
管理任意流缓冲区
(类模板) |
|
|
包装给定的抽象设备 (
std::basic_streambuf
)
并提供高级输入接口 (类模板) |
|
|
实现高级文件流输入操作
(类模板) |
|
|
实现高级字符串流输入操作
(类模板) |
|
|
(C++23)
|
实现固定字符缓冲区输入操作
(类模板) |
|
包装给定的抽象设备 (
std::basic_streambuf
)
并提供高级输出接口 (类模板) |
|
|
实现高级文件流输出操作
(类模板) |
|
|
实现高级字符串流输出操作
(类模板) |
|
|
(C++20)
|
同步输出流包装器
(类模板) |
|
(C++23)
|
实现固定字符缓冲区输出操作
(类模板) |
|
包装给定的抽象设备 (
std::basic_streambuf
)
并提供高级输入/输出接口 (类模板) |
|
|
实现高级文件流输入/输出操作
(类模板) |
|
|
实现高级字符串流输入/输出操作
(类模板) |
|
|
(C++23)
|
实现固定字符缓冲区输入/输出操作
(类模板) |
流迭代器 |
|
|
从
std::basic_istream
读取的输入迭代器
(类模板) |
|
|
向
std::basic_ostream
写入的输出迭代器
(类模板) |
|
流缓冲区 |
|
|
抽象原始设备
(类模板) |
|
|
实现原始文件设备
(类模板) |
|
|
实现原始字符串设备
(类模板) <span class="editsection noprint plainlinks" title="Edit this |
|
CharTraits
由以下标准库显式特化满足:
|
template
<>
class
char_traits
<
char
>
;
template
<>
class
char_traits
<
wchar_t
>
;
|
(自 C++20 起) (自 C++11 起) (自 C++11 起) |
|
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 适用标准 | 发布时行为 | 正确行为 |
|---|---|---|---|
| LWG 335 | C++98 |
assign
的二元重载要求
未能阻止对右值的赋值 |
其首个参数
只能是左值 |
| LWG 352 | C++98 |
X::state_type
仅要求
满足 可复制构造 |
同时要求满足
可复制赋值 与 可默认构造 |
| LWG 3085 | C++98 |
X
::
copy
(
s, p, n
)
仅要求
p
不
位于
[
s
,
s
+
n
)
区间内,约束过弱
[1]
|
要求
[
p
,
p
+
n
)
与
[
s
,
s
+
n
)
区间不得重叠
|
-
↑
[p,p + n)与[s,s + n)可能存在重叠区间,在此情况下使用 std::memcpy 来实现X::copy将导致未定义行为。