Namespaces
Variants

C++ named requirements: CharTraits

From cppreference.net
C++ named requirements

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 :: pos_type ( X :: off_type ( - 1 ) ) を使用する
  • この無効値を、 std::istream std::ostream または std::streambuf のこの型の値を受け取るメンバ関数の引数として使用することは未定義動作である
  • X が入出力クラスのtraitsテンプレートパラメータとして使用される場合、この型が std::streampos でない場合は実装定義の動作を引き起こす
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 戻り値:
  • 0 i について [ 0 , n ) の範囲内で X :: eq ( p [ i ] , q [ i ] ) true の場合
  • それ以外の場合、以下の条件を満たす場合は負の値:
    • [ 0 , n ) の範囲内の一部の j について X :: lt ( p [ j ] , q [ j ] ) true であり、かつ
    • i について [ 0 , j ) の範囲内で 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 ) 内の最小の q で、 X :: eq ( * q, c ) true となるもの
  • それ以外の場合 0
線形時間
X :: move ( s, p, n ) X::char_type*
  • i の各値について [ 0 , n ) 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 戻り値:
  • e X :: eq_int_type ( e, X :: eof ( ) ) の結果が false の場合
  • それ以外の場合、値 f を返す。ただし X :: eq_int_type ( f, X :: eof ( ) ) の結果が false となる
定数
X :: to_char_type ( e ) X::char_type 戻り値:
  • ある c に対して X :: eq_int_type ( e, X :: to_int_type ( c ) ) true となる場合、 c
  • それ以外の場合、未規定の値
定数
X :: to_int_type ( c ) X::int_type 戻り値: 何らかの値 e 、これは X::to_char_type X::eq_int_type の定義によって制約される 定数
X :: eq_int_type ( e, f ) bool
  • すべての c d について、 X :: eq ( c, d ) X :: eq_int_type ( X :: to_int_type ( c ) ,
    X :: to_int_type ( d ) )
    と等しい
  • 戻り値:
    • ある c d について、 e == X :: to_int_type ( c ) かつ f == X :: to_int_type ( d ) の場合、 X :: eq ( c, d ) を返す
    • それ以外の場合、 e f が両方とも X :: eof ( ) のコピーである場合、 true を返す
    • それ以外の場合、 e f の一方が X :: eof ( ) のコピーで他方がそうでない場合、 false を返す
    • それ以外の場合、値は未規定
定数時間
X :: eof ( ) X::int_type 戻り値: 値 e であり、すべての値 c に対して X :: eq_int_type ( e, X :: to_int_type ( c ) ) false となる 定数

標準ライブラリ

CharTraits は、以下の標準ライブラリクラステンプレートにおいてテンプレート型パラメータとして必要とされます:

文字列
文字シーケンスを格納および操作する
(クラステンプレート)
読み取り専用文字列ビュー
(クラステンプレート)
ストリーム
任意のストリームバッファを管理する
(クラステンプレート)
指定された抽象デバイス ( std::basic_streambuf ) をラップし、
高レベルな入力インターフェースを提供する
(クラステンプレート)
高レベルファイルストリーム入力操作を実装する
(クラステンプレート)
高レベル文字列ストリーム入力操作を実装する
(クラステンプレート)
固定文字バッファ入力操作を実装する
(クラステンプレート)
指定された抽象デバイス ( std::basic_streambuf ) をラップし、
高レベルな出力インターフェースを提供する
(クラステンプレート)
高レベルファイルストリーム出力操作を実装する
(クラステンプレート)
高レベル文字列出力操作を実装する
(クラステンプレート)
同期化出力ストリームラッパー
(クラステンプレート)
固定文字バッファの出力操作を実装する
(クラステンプレート)
指定された抽象デバイス( std::basic_streambuf )をラップし、
高レベルな入出力インターフェースを提供する
(クラステンプレート)
高レベルファイルストリーム入出力操作を実装する
(クラステンプレート)
高レベル文字列ストリーム入出力操作を実装する
(クラステンプレート)
固定文字バッファの入出力操作を実装する
(クラステンプレート)
ストリームイテレータ
std::basic_istream から読み込む入力イテレータ
(クラステンプレート)
std::basic_ostreamに書き込む std::basic_ostream
(クラステンプレート)
ストリームバッファ
生デバイスを抽象化する
(クラステンプレート)
生ファイルデバイスを実装する
(クラステンプレート)
生文字列デバイスを実装する
(クラステンプレート)
同期出力デバイスラッパー
(クラステンプレート)
生の固定文字バッファデバイスを実装する
(クラステンプレート)
ストリームバッファイテレータ
std::basic_streambuf から読み込む入力イテレータ
(クラステンプレート)
std::basic_streambuf に書き込む std::basic_streambuf 出力イテレータ
(クラステンプレート)


CharTraits は、以下の標準ライブラリの明示的特殊化によって満たされます: std::char_traits :

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++規格に対して遡及的に適用されました。

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 ) が重複しないことを要求
  1. [ p , p + n ) [ s , s + n ) がオーバーラップする可能性がある場合、 std::memcpy を使用して X::copy を実装すると、この場合未定義動作が発生します。