Namespaces
Variants

C++ named requirements: CharTraits

From cppreference.net
C++ named requirements

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 :: pos_type ( X :: off_type ( - 1 ) ) 作为无效值以指示错误
  • 将此无效值作为参数传递给任何接受此类型值的 std::istream std::ostream std::streambuf 成员将导致未定义行为
  • X 作为输入/输出类的特征模板参数时,若此类型非 std::streampos 则引发实现定义行为
X::state_type 可析构 可复制赋值 可复制构造 可默认构造

表达式

表达式 返回类型 语义 复杂度
X :: eq ( c, d ) bool 返回:是否应将 c 视为与 d 相等 常数
X :: lt ( c, d ) bool 返回:是否应将 c 视为小于 d 常数
X :: compare ( p, q, n ) int 返回:
  • 0 若对于 [ 0 , n ) 中的每个 i X :: eq ( p [ i ] , q [ i ] ) true
  • 否则,若满足:
    • 存在 [ 0 , n ) 中的 j 使得 X :: lt ( p [ j ] , q [ j ] ) true ,且
    • 对于 [ 0 , j ) 中的每个 i X :: eq ( p [ i ] , q [ i ] ) true
    则返回负值
  • 否则返回正值
线性
X :: length ( p ) std::size_t 返回:使 X :: eq ( p [ i ] , CharT ( ) ) true 的最小 i 线性
X :: find ( p, n, c ) const X :: char_type * 返回:
  • [ p , p + n ) 中使 X :: eq ( * q, c ) true 的最小 q
  • 否则返回 0
线性
X :: move ( s, p, n ) X::char_type*
  • [ 0 , n ) 中的每个 i ,执行 X :: assign ( s [ i ] , p [ i ] )
  • 即使在 [ p , p + n ) [ s , s + n ) 重叠时也能正确复制
  • 返回: s
线性
X :: copy ( s, p, n ) X::char_type*
  • 要求: [ p , p + n ) [ s , s + n ) 不重叠
  • 返回: s
  • [ 0 , n ) 中的每个 i ,执行 X :: assign ( s [ i ] , p [ i ] )
线性
X :: assign ( r, d ) (未使用) 赋值 r = d 常数
X :: assign ( s, n, c ) X::char_type*
  • [ 0 , n ) 中的每个 i ,执行 X :: assign ( s [ i ] , c )
  • 返回: s
线性
X :: not_eof ( e ) X::int_type 返回:
  • X :: eq_int_type ( e, X :: eof ( ) ) false ,则返回 e
  • 否则返回使 X :: eq_int_type ( f, X :: eof ( ) ) false 的值 f
常数
<span class

标准库

CharTraits 被以下标准库类模板作为模板类型参数所要求:

字符串
存储和操作字符序列
(类模板)
只读字符串视图
(类模板)
管理任意流缓冲区
(类模板)
包装给定的抽象设备 ( std::basic_streambuf )
并提供高级输入接口
(类模板)
实现高级文件流输入操作
(类模板)
实现高级字符串流输入操作
(类模板)
实现固定字符缓冲区输入操作
(类模板)
包装给定的抽象设备 ( std::basic_streambuf )
并提供高级输出接口
(类模板)
实现高级文件流输出操作
(类模板)
实现高级字符串流输出操作
(类模板)
同步输出流包装器
(类模板)
实现固定字符缓冲区输出操作
(类模板)
包装给定的抽象设备 ( std::basic_streambuf )
并提供高级输入/输出接口
(类模板)
实现高级文件流输入/输出操作
(类模板)
实现高级字符串流输入/输出操作
(类模板)
实现固定字符缓冲区输入/输出操作
(类模板)
流迭代器
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 > ;
template <> class char_traits < char8_t > ;
template <> class char_traits < char16_t > ;

template <> class char_traits < char32_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 ) 区间不得重叠
  1. [ p , p + n ) [ s , s + n ) 可能存在重叠区间,在此情况下使用 std::memcpy 来实现 X::copy 将导致未定义行为。