C++ named requirements: CharTraits
CharTraits は、与えられた文字型に対する基本的な文字および文字列操作を抽象化するtraitsクラスです。ほとんどの標準ライブラリの文字列および入出力クラスは、対応する文字テンプレート型パラメータと共に 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
が入出力クラスのtraitsテンプレートパラメータとして使用される場合、
std::streamoff
でない場合は実装定義の動作を引き起こす
|
X::pos_type
|
|
X::state_type
|
Destructible 、 CopyAssignable 、 CopyConstructible 、 DefaultConstructible |
式
| 式 | 戻り値の型 | セマンティクス | 計算量 |
|---|---|---|---|
| X :: eq ( c, d ) | bool | Returns: c が d と等しいと見なされるかどうか | 定数 |
| X :: lt ( c, d ) | bool | Returns: 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
|
戻り値:
|
定数 |
| X :: to_char_type ( e ) |
X::char_type
|
戻り値:
|
定数 |
| X :: to_int_type ( c ) |
X::int_type
|
戻り値: 何らかの値
e
、これは
X::to_char_type
と
X::eq_int_type
の定義によって制約される
|
定数 |
| X :: eq_int_type ( e, f ) | bool |
|
定数時間 |
| X :: eof ( ) |
X::int_type
|
戻り値: 値 e であり、すべての値 c に対して X :: eq_int_type ( e, X :: to_int_type ( c ) ) が false となる | 定数 |
標準ライブラリ
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に書き込む
std::basic_ostream
(クラステンプレート) |
|
ストリームバッファ |
|
|
生デバイスを抽象化する
(クラステンプレート) |
|
|
生ファイルデバイスを実装する
(クラステンプレート) |
|
|
生文字列デバイスを実装する
(クラステンプレート) |
|
|
(C++20)
|
同期出力デバイスラッパー
(クラステンプレート) |
|
(C++23)
|
生の固定文字バッファデバイスを実装する
(クラステンプレート) |
ストリームバッファイテレータ |
|
|
std::basic_streambuf
から読み込む入力イテレータ
(クラステンプレート) |
|
|
std::basic_streambuf に書き込む
std::basic_streambuf
出力イテレータ
(クラステンプレート) |
|
CharTraits
は、以下の標準ライブラリの明示的特殊化によって満たされます:
std::char_traits
:
|
template
<>
class
char_traits
<
char
>
;
template
<>
class
char_traits
<
wchar_t
>
;
|
(C++20以降) (C++11以降) (C++11以降) |
|
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 335 | C++98 |
assign
の二項オーバーロードに対する要件が
右辺値への代入を防げていなかった |
第一引数は左辺値
のみ受け付け可能 |
| LWG 352 | C++98 |
X::state_type
は
CopyConstructible のみが要求されていた |
CopyAssignable
および
DefaultConstructible も要求される |
| 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を実装すると、この場合未定義動作が発生します。