>サイトトップへ >このカテゴリの一覧へ

(





 





''

+.(*(N

アダプタ

  

F







P P&

  

F







6



P LP&

  

F





P PF 

P F

33!  &

  

F







6

P LPF  6

P F

33! 6 &

  

F







P PP&

  

F







6



P LPP&

  

F





P PPF 



P PF

33!  &

  

F







6

P LPPF

 6



P PF

33! 6 &

 

 

F







PP P&

 

 

F







6



PP LP&

 

 

F





PP PF

 

P F

33! 

 &

 

 

F







6

PP LP

F 

 6



P F

33! 6

 &

 

 

F







PP P

P

&

 

 

F







6



PP LP

P

&

 

 

F





PP P

P

F



P PF

33! 

 &

 

 

F







6

PP LP

P

F

 

6

P PF

33! 6

 &

R

関数オブジェクトと関数テンプレートとを一緒に使うことによって,ライブラリの表現能力が向上し,結果として,



効率のよいコード にすることができる。

"##

プログラムで,

3 %

型を要素とする二つのベクトル,



及び



の要素ごとの加算を行ってその結



果を



に入れるには,次のように書けばよい。

(



(

(

(

   &



のすべての要素の符号を反転する場合,次のように書けばよい。



(



(

(

 

&

アダプタなどの構成要素が,



個 又は



個の実引数をもつ関数オブジェクトを操作できるようにするには,その関

数オブジェクトに対して,次の型名の定義を提供しておかなければならない。

実引数が



個の場合,

 

 

及び

 

 

実引数が



個の場合,



 

 

 

 

 

及び

 

 



基本

次のクラスは,実引数の型 及び 返却値の型に対する型名の定義を容易にするために提供される。



 

 

6



E 

 

P  

Q

 

6

 P &

 

E 

 P &

R&

 

 

6L



6+



E 

 

P  

Q

 

6L

P P



&

 

6+

 P 

P



&

 

E 

 P &

R&



算術演算

標準ライブラリは,言語自体(

#(

及び

#)

)で規定されるすべての算術演算子に対する基本関



数オブジェクトクラスを提供している。



/

0

 



&

  /((0

5



   

)

(

 

)



 

6


)





 





効果  

 

は,

)



を返す。





/

0

 



&

  /((0

5



   

)

(

 

)



 

6

効果  

 

は,

V



を返す。





/

0

 



&

  /((0

5



   

)

(

 

)



 

6

効果  

 

は,

!



を返す。





/

0

 

!

&

  /((0

5



   

)

(

 

)



 

6

効果  

 

は,

'



を返す。



/

0

 

 

&

  /((0

5



   

)

(

 

)



 

6

効果  

 

は,

U



を返す。





/

0

 



&

  /(0

5



   

)



 

6

効果  

 

は,

V

を返す。



比較演算

標準ライブラリは,言語自体(

#*

及び

#

)で規定されるすべての比較演算子に対する基本関



数オブジェクトクラスを提供している。



/

0

 



&

  /(( 0

5

 

   

)

(

 

)



 

6

効果  

 

は,

%%



を返す。





/

0

 

 

&

  /(( 0

5

 

   

)

(

 

)



 76

効果  

 

は,

[%



を返す。





/

0

 

 

&

  /(( 0

5

 

   

)

(

 

)



 

6

効果  

 

は,





を返す。





/

0

 



&

  /(( 0

5

 

   

)

(

 

)



 

6

効果  

 

は,





を返す。



/

0

 

  

&

  /(( 0

5

 

   

)

(

 

)



 

6

効果  

 

は,

%



を返す。








 







/

0

 



&

  /((  0

5

 

   

)

(

 

)



 

6

効果  

 

は,

%



を返す。

上のテンプレート







 

及び



 

については,その任意のポインタ型に対す

る特殊化は,組み込み演算子の





%

及び

%

が全順序でなかったとしても,全順序となる。



論理演算

標準ライブラリは,言語自体(

#

##

及び

#

)で規定されるすべての論理演算子に対す



る基本関数オブジェクトクラスを提供している。



/

0

 

 

&

  /(( 0

5

 

   

)

(

 

)



 

6

効果  

 

は,

00



を返す。





/

0

 

 

&

  /((  0

5

 

   

)

(

 

)



 

6

効果  

 

は,

11



を返す。





/

0

 

  

&

  /( 0

5

 

   

)



 

6

効果  

 

は,

[

5

を返す。



#

否定子

否定子



L

及び

+

は,単項 及び



項の述語を実引数とし ,その否定を結果として



返す(

#

参照)



/

8 0



 

&



  /

8 && (   0

5

&



   

8 )

  

 

   



8 && )



 

6

効果  

 

は,

[



を返す。





/

8 0

 /8 0

   

8 )

  

返却値  



C 











/

8 0



 

&



  /

8 &&    (



8 &&    (

 0

5

&



   

8 )

  

 

   



8 &&    )

(

 



8 &&    )



 

6

効果  

 

は,

[





を返す。





/

8 0

 /8 0

 1  

8 )

  

返却値  



C 

 




*





 





(

結合子

結合子

L

及び

+

は,二つの実引数をもつ関数オブジェクト



及び 値

を受け取り,





の第



実引数 又は 第



実引数に

を与えて得られる実引数が一つの関数オブジェクトを返す。

(

クラステンプレート

L



/

9  0



 

&



  /

9  &&     (



9  && 0

5

 &

9  





9  &&    

!

&

   

9  )

(

 



9  &&    )

 



9  && 

   



9  &&    )



 

6

効果  

コンストラクタは,



で,

 



で初期化する。



返却値  

 

は,

  

を返す。



(

L



/

9  (



0

 /9  0

  

9  )

(

 

)

 

返却値  

LB 







 

B 33

 

 



(

クラステンプレート

+



/

9  0



 1

&



  /

9  &&    (



9  && 0

5

 &

9  





9  &&    

!

&

 1  

9  )

(

 



9  &&    )

 



9  && 

   



9  &&    )



 

6

効果  

コンストラクタは,



で,

 



で初期化する。



返却値  

 

は,

 

 

を返す。



(

+



/

9  (



0

 1/9  0

1  

9  )

(

 

)

 

返却値  

+B 







 

B 33 



 

 





P(

(

+





/ &

これは,

より大きい最初の



の要素を見つける。

P(

(

L





/ &

これは,

より小さい最初の



の要素を見つける。


*





 





)

関数へのポインタに対するアダプタ

標準ライブラリは,次のテンプレートを提供し,

( 単項 又は



項の)関



数へのポインタを関数アダプタとともに使えるようにしている。



/

: (



;0



      

&



  /: (

;0

5

&



       ; 

$ :  

;

  : 



 

6

効果  

 

は,



を返す。





/

: (



;0

     / : (

;0

  ;

$ :  

返却値  







  6

E 





/

: (



: 1(



;0



      

&



  /: (:  1(;  0

5

&



       ;  

$ : (

: 1 

;

  : 

(

: 1



 

6

効果  

 

は,





を返す。





/

: (



: 1(



;0

      /:  (:  1(;  0

  ;

$ : (

: 1 

返却値  







  6L 6

+ E











  P(





(

L+ 

P







Y7Y Y7))Y &

これは,列



の中のそれぞれの

:";

を,

:"##;

に置き換える。









メンバへのポインタに関するアダプタ

)

の関数へのポインタに対するのと同じ機能を,メンバへのポ



インタに対して提供する。



/

<(



0





&



  /$(

<0

5

&



 <

&&$ 

<

  $



 

6

効果  



 



は,ポインタ実引数が与えられたとき,それを初期化するためのメンバ関数を呼び出す。





/

<(



(



:0





&



  /$(

:(

<0

5

&



 <

&&$ : 

<

  $

(

:



 

6

効果  



 L



は,ポインタ実引数 及び 適当な型のもう一つの実引数が与えられたとき,それを初期化するため



のメンバ関数を呼び出す。







関数型への多重ポインタをもつ処理系では,関数テンプレート



%$

も提供する。


*





 





/

<(



0

/<(0

 <

&&$ 

/

<(



(



:0

/<((:0

 <

&&$ : 

効果  



 0533

が返してくる( 関数)オブジェクトは,それに

5

へのポインタと



に必要な実引数( もしあ



れば )とを与えると,

533

を呼び出す。



/

<(



0



 

&



  /(

<0

5

&



  <

&&$ 

<

  )



 

6

効果  



 





は,参照の実引数が与えられたとき,それを初期化するためのメンバ関数を呼び出す。



/

<(



(



:0



 

&



  /(

:(

<0

5

&



  <

&&$ : 

<

  )

(

:



 

6

効果  



 L





は,参照の実引数 及び 適当な型のもう一つの実引数が与えられたとき,それを初期化するた



めのメンバ関数を呼び出す。

/

<(



0

 /<(0

  <

&&$ 

/

<(



(



:0

 /<((:0

  <

&&$ : 

効果  



 

0533

は,

5

への参照 及び



に必要なもう一つの実引数( もしあれば )が与えられたときに,

533

を呼び出すことを可能にするオブジェクトを返す。



/

<(



0



 

&



  /$(

<0

5

&



  <

&&$

  

<

   

$



 

6

効果  





 



は,ポインタ実引数が与えられたとき,それを初期化するためのメンバ関数を呼び出す。



/

<(



(



:0



 

&



  /$(

:(

<0

5

&



  <

&&$ :

  

<

   

$

(

:



 

6

効果  





 L



は,ポインタ実引数 及び 適当な型のもう一つの実引数が与えられたとき,それを初期化す

るためのメンバ関数を呼び出す。

/

<(



0

 /<(0

 <

&&$

  

/

<(



(



:0

 /<((:0

 <

&&$ :

  


*





 





効果  



 0533

は,

5

へのポインタ 及び



に必要なもう一つの実引数( もしあれば )が与えられたときに,



533

を呼び出すことを可能にするオブジェクトを返す。



/

<(



0



  

&



  /(

<0

5

&



   <

&&$

  

<

   

)



 

6

効果  





 





は,参照の実引数が与えられたとき,それを初期化するためのメンバ関数を呼び出す。





/

<(



(



:0



  

&



  /(

:(

<0

5

&



   <

&&$ :

  

<

   

)

(

:



 

6

効果  





 L





は,参照の実引数 及び 適当な型のもう一つの実引数が与えられたとき,それを初期



化するためのメンバ関数を呼び出す。

/

<(



0

  /<(0

  <

&&$

  

/

<(



(



:0

  /<((:0

  <

&&$ :

  

効果  



 

0533

は,参照の実引数 及び



に必要なもう一つの実引数(もしあれば )が与えられたとき,



それを初期化するためのメンバ関数を呼び出す。



メモリ

ヘッダ



一覧

  



Q

''

+.(M(L

省略時割付け子

 

 





 &

 





 &

 

 





G



 %% 

 0



 G0

 &

 

 





G



 [% 

 0



 G0

 &

''

+.(M(+

素記憶域反復子

 

 

B  <







PP



&

''

+.(M(*

一時バッファ

 

 



! P



P P











P

 &

 

 





 P P

 





!

&

''

+.(M(M

特殊アルゴ リズム

 

 

< <



9<



9<

$P 



<

<









< <



9<

  &

 

 

9<







$P

9





<









9<





0

&

 

 

9<



F$







$P

P

9





<









F$





0

&

''

+.(M(/

ポインタ

  

5



 P &


*





 





R



省略時の割付け子

  



Q

 

 





 &

''



に対する特殊化

 





 

Q

 3

 

!

&

 



!

P &

''



への参照のメンバはない。

 



 P &

 

 

G

 



Q

 

 G

&

R&

R&

 

 





 

Q

 3

 

$P

$P &

 

P

 P &

 

!

&

 



!

P &

 

0

 &

 



0

P &

 



 P &

 

 

G

 



Q

 

 G

&

R&

 

 &

  

 0

 &

 

 

G

  

 G0

 &

X 

 &



 

&

P 

 P





 

&



 $P



 3

3 



P









%

. &



  



$P 

 &

$P 

 P$



 &



  



0

 &



 

&

R&

R



割付け子

 

のメンバ

 

   



 

返却値  

0



  

     



 

返却値  

0



 

  '

(

  /! 0&&    

, 

参考

33 

$



を使用する(

 

参照)



要件  



は,

であるか,メンバ

 

から受け取りまだ

 

に渡されていない値であるかでなけれ



ばならない。



の値は,処理系が性能を改善するために用いてもよい。

返却値  



P

$

の大きさをもつ配列の先頭要素へのポインタを返す。この配列は,型



のオブジェクトに対

し境界調整されている。

参考 この記憶域は,

33 

$



によって確保される。しかし,この関数が,いつ,どのよう



な頻度で呼ばれるかについては規定しない。また,





の使い方も規定しない。処理系によっては,局所

性を表す意図で用いてもよい。


*





 





例外  記憶域が確保できなかった場合,





を送出する。

! 

   

(

'

 

要件  

は,

 

によって得られた値でなければならない。



は,

を返した

 

の呼出しにおける第



引数と等しくなければならない。

効果  

の指す記憶域を解放する。

参考

33 

!

を使用する。しかし ,それがいつ呼び出されるかは規定しない。



'

'

 

  

返却値  

 A

.

が成功する最大の

A

を返す。



! 

    

(

   

! 

返却値  



!





! 

   

 

返却値  

!

VX





割付け子

 

の大域的変数



/

(



10

 

  ,,  

  /0)(

 

  /10)

  

返却値  

 





/

(



10

 

  -,  

  /0)(

 

  /10)

  

返却値  







素記憶域反復子

素記憶域反復子







は,プログラムが初期化していない記憶域に何ら



かの結果を書き込めるようにする目的で提供してある。テンプレート仮引数

B  <

は,

 !

が,



へのポ インタを返す

 0

の定義されたオブジェクトを返すようにするために必要とし ,また,出力反復子の

要件(



参照)を満足するためにも必要とする。

  



Q

 

 

B  <







PP



3



  P







P



 



 



 



 





Q

 3

  

PP





B



<







&

PP



B





<





 

0

 ! &

PP



B





<





 

0

 % 

0

 &

PP



B





<





 

0

 )) &

PP



B





<





 



 )) &

R&

R

   9 =   

 

効果  

が指すのと同じ値を指す反復子を初期化する。



   /9 =    ( 0)

  $ 

返却値  

!



   /9 =    ( 0)

  ,  

)

 

効果  反復子が指す場所に,



を用いて値を構築する。



返却値  反復子への参照

   /9 =    ( 0)

  %% 


*#





 





効果  事前増分を行う。すなわち,反復子を一つ進め,その反復子への参照を返す。



   /9 =    ( 0

  %%  

効果  事後増分を行う。すなわち,反復子を一つ進めるが,進める前の反復子の値を返す。



一時バッファ



/

0

 /$(

 0

      

 

効果  



個の隣接した型



のオブジェクトを格納するのに十分な記憶域へのポインタを返す。



返却値  

バッファのアドレス 及び 容量(

$

を単位とする。)から成る対を返す。記憶域が確保できなかった



場合は,値

の対を返す。



/

0

! 

      $

 

効果  

が指すバッファを解放する。



要件  

バッファは,



 

 

によって確保されたものでなければならない。





特殊アルゴリズム





に示すアルゴリズムにおいて,テンプレート仮引数として使われるす



べての反復子は,

 !

が返すオブジェクトに対して

 0

が定義されている必要があり,それは



へのポイ

ンタを返す。アルゴリズム

$

 

では,テンプレート仮引数

< <

は,入力反復子(



の要件を満足する必要がある。ここでのすべてのアルゴ リズムにおいて,テンプレート仮引数

9<

は,

前進反復子(



)の要件,及び 変更可能な反復子(



)の要件を満足しなければならないし,これらの反復子

は,増加,代入,比較 又は 有効な反復子間の差分の操作中に例外を送出してはならない。ここでのアルゴ リズムで

は,例外が送出されても無効となる。



$

 



/

==  (



>  =  0

>  = 

'  = =  

 (

== 

(

>  = 

 

効果  次のプログラムと同等とする。





&



[%

&

)) 

))



 P 

!

0!



 



 

P

9





<







33



P





!





&

返却値  

 





$





/

>  =  (



0

! 

' >   =    

 (

>  = 

(

 

)

 

効果  次のプログラムと同等とする。





&



[%

&

))



 P 

!

0!





 

P

9





<







33



P





&



$







/

>  =  (



<'(



0

! 

' >   =   

 (

<'

(

 

)

 

効果  次のプログラムと同等とする。





&

VV&

))



 P 

!

0!





 

P

9





<







33



P





&


*(





 





#

クラステンプレート

 



テンプレート

 



は,



によって得られたオブジェクトへのポイン



タを格納する。そして,

 



自身が解体されるとき( 例えば,ブロック有効範囲を抜けるとき)には,格納して

いたポインタが指すオブジェクトを消去する。

テンプレート

 





は,

 



への参照を保持する。これは,

 



のオブジェクトを関数に渡し



たり,関数の返却値としたりするときに用いられる。

  



Q

 

 

J

 

 P P

QR&

  

5



 P 

Q

 3

 

5

P &

''

+.(M(/(L

コンストラクタ,コピー,デストラクタ

  

 P 5!

%.

 &

 P  P 

0

 &

  

J

 P  P 

J

0

 &

 P 0

 % P 

0

 &

  

J

 P 0

 % P



J

0

 &

 P 0

 % P 

P



5





 &

X P 

 &

''

+.(M(/(+

メンバ

50

 !



 &

5!

 V



 &

5!





 &

5!



 &



5!

%.

 &

''

+.(M(/(*

型変換

 P  P 

P



5

 &

  

J

 

 P PJ

 &

  

J

 

 P J

 &

R&

R

 



は,所有権の厳格な意味規則を提供する。

 



は,それが保持するポインタが指すオブジェクトを



所有する。

 



をコピーすると,ポインタがコピーされるだけでなく,ポインタが指すオブジェクトに対する

所有権がコピー先に移る。同一のオブジェクトに対し ,複数の

 



が同時に所有権をもっている場合の動作は,

未定義とする。

参考

 



を使うことによって,次のことが可能になる。

動的に割り付けられたメモリに対し ,例外に対する安全性を一時的に提供する。

動的に割り付けられたメモリの所有権を,関数に渡す。

動的に割り付けられたメモリを,関数の返却値として返す。

 



は,標準ライブラリのコンテナ要素に対する二つの要件,コピー構築可能性 及び 代入可能性を

満足しない。したがって,標準ライブラリのコンテナを

 



を使って具現した場合,その動作は未

定義とする。

#

 



のコンスト ラクタ



  ?$



,

  

事後条件  

コンストラクタ実行後,

!

は,ポインタ

を保持する。



    )



  

効果  

(

を呼び出す。



事後条件  

コンストラクタ実行後,

!

は,

(

が返すポインタを保持する。



/

@0

    /@0)



  

要件  

J!

は,暗黙の型変換で

5!

に変換できなければならない。



効果  

(

を呼び出す。


*)





 





事後条件  

コンストラクタ実行後,

!

は,

(

が返すポインタを保持する。



  )

  ,   )



  

要件  式





は,適格でなければならない。

効果  

(



を呼び出す。

返却値  

!

/

@0

  )

  ,   /@0)



  

要件  

J!

は,暗黙の型変換によって

5!

に変換できなければならない。式





は,適格でなければなら



ない。

効果  

(



を呼び出す。



返却値  

!



. 

  

要件  式





は,適格でなければならない。



効果  





を呼び出す。



#

 



のメンバ

?)

  $

 

  

要件  



[%

.



返却値  

!



?$

  A0

 

  

返却値  





?$



 

  

返却値  

!

が保持するポインタを返す。



?$



  

返却値  



事後条件  実行後,

!

は,空ポインタを保持する。



! 

 ?$

,

  

効果  



[%

の場合,





を呼び出す。

事後条件  実行後,

!

は,ポインタ

を保持する。

#

 



の型変換

     /?0

  

効果  



が保持する

 



に対し

(

を呼び出す。



事後条件  実行後,

!

は,



が返したポインタを保持する。



/

@0

 

   /@0

  

返却値  

!

を保持する

 



J

を返す。



/

@0

 

  /@0

  

効果  



を呼び出す。



返却値  



が返したポインタを保持する

 

J

を返す。

  )

  ,    /?0

 

効果  



が参照を保持する対象の

 



に対して

 (

を呼び出す。



返却値  

!


*





 





(

ライブラリ

ヘッダ

 



に示す。





ヘッダ

 

の要約

種別

名前  

関数

 ,

 ,

,



その内容は,次の変更点を除き,

"

ライブラリのヘッダ

(

の内容と同じとする。



関数

 

 

及び

 

が記憶域を確保するとき,

33 



 

)を用いること



はない。

関数



が記憶領域を解放するとき,

33 



を用いることはない。



参照  

6





)

ヘッダ

 



に示す。



ヘッダ

 

の要約

種別

名前  

マクロ

AG??

$



関数

 ,

  ,

 ,

,



その内容は,



で規定する

 

についての変更点を除き,

"

ライブラリのヘッダ

(

の内容と



同じとする。

参照  

6





)

#

日付 及び 時刻 ヘッダ

 

#

に示す。



#

ヘッダ

 

の要約

種別

名前  

マクロ

AG??

$

,

 

,





構造体



関数

 ,

 ,

,

 ,

,

,

,

,



その内容は,

"

ライブラリのヘッダ

(

の内容と同じとする。



参照  

6





)

及び

6





追補



(



文字列ライブラリ

この箇条では,

:

文字

;

の列を操作するためのライブラリ要素を規定する。このライブラリ



では,任意の

"

互換型(

*

)を文字として扱うことができ,そのような型を文字様の型(



-I





1



)と呼ぶ。

文字様の型のオブジェクトは,文字様のオブジェクト,又は 単に文字(





)と呼ぶ。

(

に,



の内容を示す。



(

 文字列ライブラリの要約

箇条

ヘッダ  



文字特性





文字列クラス





ナル文字終端列ユーティリティ

  

   

 

  

 


**





 







文字特性



では,文字特性(





!

)を表すクラスに対する要求を規定する。そして,この要求



を満たすクラステンプレート



 

を規定し,それを特殊化した二つのクラス,



 

及び



 



を規定する。



及び

)

で規定するほとんどのクラスは,関連する型 及び 関数を与えてはじめて意味が決まる。これらの型



及び 関数は,テンプレート仮引数

:!;

として渡される特性のメンバ型定義 及び メンバ関数として与える。



では,これらのメンバが保証しなければならない意味を規定する。

文字列クラス 又は 入出力ストリームクラスを生成して,特定の文字コンテナ型

7

を扱うには,

7

及び そ



の文字特性クラス



をテンプレート実引数として渡す必要がある。こうした文字テンプレート 又は 入出力ス

トリームテンプレートでは,これらの実引数を受け取るテンプレート仮引数が,



及び



として定義され

ている。このとき,

33 

 

7

とは,同一の型でなければならない。



では,構造体テンプレート



 

を規定し ,その二つの明示的な特殊化である





 

及び



 



を規定する。これらは,ヘッダ



に含まれ,



で規定

される要求を満足する。



文字特性に対する要求

)

で用いる記号を,次のとおり定義する。



5

は,文字コンテナ型

7

に関係する型や関数を記述した文字特性クラス



を表す。

及び



は,

7

型の値を表す。

及び



は,



7!

型の値を表す。



は,

7!

型の値を表す。





及び



は,

$



型の値を表す。



及び



は,

533

 

型の値を表す。



は,

533 

 

型の値を表す。



は,

533

 

型の値を表す。

文字特性に関する操作は,例外を送出してはならない。

)

 文字特性



に対する要求

返却値の型

表明/参考/事前条件/事後条件

計算量

533 

 





で規定する。)

コンパイル時

533

 



で規定する。)

コンパイル時

533

 



で規定する。)

コンパイル時

533 

 



で規定する。)

コンパイル時

533

 



で規定する。)

コンパイル時

533 

( 用いない。)

%

の代入を行う。

定数

533 



返却値  



と等しいとして扱える場合

定数

 

とし ,そうでない場合



とする。

533 



返却値  



より小さいとして扱える場合

定数

 

とし ,そうでない場合



とする。

533    



7 ,



内のすべての



に対し

533 ST

線形

ST

 

である場合,

とする。

そうでない場合,

7 ,



内の ある



に対し

533 ST ST

 

となり,

7 ,



内の

すべての



に対し

533 ST ST

 

なる



が存在するとき負の値とする。

そうでない場合,正の値とする。

533

$



返却値  

533 ST 



 

線形

となる最小の



533 



533

返却値  

7 , )

内で,

533!

線形



 !

 

となる最小の



。そのような



が存在しない場合,

とする。








 





)

 文字特性



に対する要求( 続き)

返却値の型

表明/参考/事前条件/事後条件

計算量

533 

533 

 !

返却値  

7 ,



内のすべての



に対して

線形

533ST

S

T

を実行した後の



区間

7 ,

)

7,

)

が重なっていても,

正確にコピーする。

533   

533 

 !

事前条件  

7,)

内に存在しない。

線形

返却値  

7 ,



内のすべての



に対して

533ST

S

T

を実行した後の



を返す。

533 

533 

 !

7 ,

内のすべての



に対して

線形

533ST

を実行した後の



返す。

533



533

 

返却値  

533



  533

定数



のとき



とする。そうでない場合,

533



  533



となる



とする。

533



 

533 

 

533



  533



 

定数

 

であるような

が存在する場合,

とする。そうでない場合,未規定とする。

533



 

533

 

返却値  





 

及び





 

定数

の定義によって制約される値



とする。

533



  



返却値  



すべての

及び



に対し ,

定数

533 

の値は,

533



 

533



  533



 

に等しい。





でない場合,





がど ちらも

533

のコピーのとき

 





でも



でもない場合,





の一方が

533

のコピーであり,他方が

533

のコピーでないとき











のいずれでもない場合,

未規定の値とする。

533

533

 

すべての

の値に対して,

533



 

定数

 533



 



となる



とする。

次の構造体テンプレートを,明示的な特殊化のための基底として,ヘッダ



内で提供しておかなければな



らない。

  



 

P&

ここ以降,



の終わりまで,



は,この特性テンプレートの仮引数を表すものとする。





文字特性の型定義



#B:;

  



 

は,



及び

)

で規定するクラスの実装で用いられる文字コンテナ型を示すのに用いる。





=



要件  

文字コンテナ型



 

に対し,対応するコンテナ型

<A



が存在する。

<A



は,対応する



 



値から変換されるすべての有効な文字 及び ファイルの終わりを表す値



を表現することができる,型 又は ク








 





ラスとする。型



 

は,ファイルの終わりを保持可能な文字コンテナ型であり,入出力ストリームクラスで定

義されるメンバ関数の返却値型に用いる。









9>>





89<

 

要件  



 

及び



 

に対する要件は,

)

で規定する。





<:C



要件  



 

は,型

7 7 





)に対する要件を満たしていなければならない。









の特殊化

  



Q

 

 

P 

&

 

 

P 

P

&

R

ヘッダ



では,テンプレート構造体





を特殊化した



種類の構造体を宣言する。



構造体



 

は,





型に対するテンプレート 構造体





の特殊化とする。この構造体



は,



及び

)

で規定するクラスの動作を保証するのに必要な,すべての型 及び 関数を含む。

それらの型 及び 静的メンバ関数は,



で規定する。





構造体



 

  



Q

 

 

P 

Q

 



P &

 



P &

 



P &

 

 

P &

 

P

P &





 P 0

L



P 0

+ &





 

P 0

L



P 0

+ &





 

P 0

L



P 0

+ &





  

P !

L



P !

+

$P

 &



$P

 

P !

 &





P !

 

P !



$P





P 0

 &



P !

 P !

L



P !

+

$P

 &



P !

  P !

L



P !

+

$P

 &



P !

 P 

!



$P



P 

 &



P 

P 

P 0

&



P 

P P  



P 0

&



P 

PP  



P 0

&





PP  

P 0

L



P 0

+ &



P 

 &

R&

R

ヘッダ





)では,テンプレート構造体







に対する特殊化を宣言する。これは,



ナロー文字単位の入出力ストリームクラスに用いる。

この特殊化では,



 



 



 

及び



 

が,それぞれ,型



 





及び





として定義してある。

 

は,処理系定義とする。ただし ,

CBF



に対する要件(



)を満たしていなければならない。





は,処理系定義とする。ただし ,

B99



に対する要件(



)を満たしていなければならない。







は,ヘッダ

  

の中で定義される。この型は,処理系定義の多バイト符号化規則において生じ

うる,すべての変換状態を表せる型とする。







?

 

 %

を保持可能だとすると,いくつかの入出力ストリーム操作は,意外な結果をもたらすだろう。








 





二つの実引数のメンバ





及び



は,それぞれ,組込みの演算子

%

%%

及び



と同じものとして定義し



てある。

メンバ



は,

8B9

を返却する。



構造体



 



  



Q

 

 

P 

P

Q

 

 P

P &

 

P

P &

 



P &

 

 

P &

 

P

P &





 P 0

L



P 0

+ &





 

P 0

L



P 0

+ &





 

P 0

L



P 0

+ &





  

P !

L



P !

+

$P

 &



$P

 

P !

 &





P !

 

P !



$P





P 0

 &



P !

 P !

L



P !

+

$P

 &



P !

  P !

L



P !

+

$P

 &



P !

 P 

!



$P



P 

 &



P 

P 

P 0

&



P 

P P  



P 0

&



P 

PP  



P 0

&





PP  

P 0

L



P 0

+ &



P 

 &

R&

R

ヘッダ





)は,テンプレート構造体





 



に対する特殊化も宣言する。これは,

ワイド 文字単位の入出力ストリームクラスに用いる。



 



 

及び



 

として定義される型は,





 

及び





とする。



 

は,処理系定義とする。

 

は,



で規定された

CBF



の要件を満たしていなければ



ならない。

参考 この段落は,意図的に空とする。







は,

  

の中で定義される。この型は,処理系定義の多バイト符号化規則において生じ うる,



すべての変換状態を表すことができる型とする。

二つの実引数のメンバ





及び



は,それぞれ,組込みの演算子

%

%%

及び



と同じものとして定義し

てある。

メンバ



は,

I8B9

を返却する。





文字列クラス

ヘッダ



は,すべての文字様(



)のテンプレート実引数を扱うことができる 基本



的な文字列クラステンプレート 及び その特性を定義する。更に,このヘッダでは,文字様の可変長オブジェクト列

を操作するための 幾つかの関数呼出し情報も定義する。

ヘッダ



では,特殊化されたテンプレート クラス,



及び



も定義する。



ヘッダ



の一覧

  



Q

''

+L(L

文字特性

  



 

P&

 



 

P 

&

 



 

P 

P

&

''

+L(*

クラステンプレート

 P

  







%

P 





6 

%

  










 







 P&

  









6 

 P 







 6









 ) 

 P 



 





 6







0





 P 



 





 6







0

 &

  









6 

 P 







 6









 ) 

!





 P 



 





 6







0

 &

  









6 

 P 







 6









 ) 





 P 



 





 6







0

 &

  









6 

 P 







 6









 ) 

 P 



 





 6







0





!

 &

  









6 

 P 







 6









 ) 

 P 



 





 6







0





 &

  









6 



 %% 

 P 









6







0





 P 









6







0

 &

  









6 



 %% 

!





 P 









6







0

 &

  









6 



 %% 

 P 









6







0





!

 &

  









6 



 [% 

 P 









6







0





 P 









6







0

 &

  









6 



 [% 

!





 P 









6







0

 &

  









6 



 [% 

 P 









6







0





!

 &

  









6 



 

 

 P 









6







0





 P 









6







0

 &

  









6 



 

 

 P 









6







0





!

 &

  









6 



 

 

!





 P 









6







0

 &

  









6 



 

 

 P 









6







0





 P 









6







0

 &

  









6 



 

 

 P 









6







0





!

 &

  









6 



 

 

!





 P 









6







0

 &

  









6 



 % 

 P 









6







0





 P 



 





 6







0

 &

  









6 








 







 % 

 P 









6







0





!

 &

  









6 



 % 

!





 P 









6







0

 &

  









6 



 % 

 P 









6







0





 P 









6







0

 &

  









6 



 % 

 P 









6







0





!

 &

  









6 



 % 

!





 P 









6







0

 &

''

+L(*(,(N

  









6 



  P













6







0



 P 









6







0

 &

  









6 

 P 



 





0

  P



















0



 P 



 





 6







0

 &

  









6 

 P 



0

  P













0





 P 









6







0

 &

  









6 

 P 



 





0

 P









 





0



 P 



 





6







0





 &

  









6 

 P 



 





0

 P









 





0



 P 



 





6







0

 &

 

 P 



&

 

 P 

P



&

R



クラステンプレート





クラステンプレート





は,文字様の型



に対し ,可変



個かつ任意の文字様のオブジェクト(



)によって構成される列を保持可能なオブジェクトを定義する。列の先頭位

置の番号は,

とする。このような列は,その文字様の型が文脈から明らかな場合,文字列(

!

)と呼ぶ。以後,



では,





に与えられた文字様の型を



で表す。文字列のための記憶域は,型





のメ

ンバ関数によって,必要に応じて割付け 及び 解放が行われる。この記憶域割付けには,テンプレート仮引数で与え

られた

6 

クラスを用いる。

6 33 

 

は,



と同じでなければならない。

クラステンプレート





は,



で規定する列

!A 

に対する要件を満足する。更に,







に対する反復子は,ランダムアクセス反復子(

#

)であるから,





は,逆進可能コン

テナの要件も満足する。

いかなる場合にも,

$

%

  

とする。





で規定する関数は,



種類のエラーを,異なる例外を用いて通知する。



長さに関するエラー:





*

範囲外アクセスに関するエラー:

 





*#

文字列操作の結果として

$



$

をこえた場合,その操作は,





を送出する。







の列の要素に対する参照,ポインタ 及び 反復子は,





のオブジェクトに対して次のよ

うな操作を行った場合,無効になることがある。

非メンバ関数の

 

)

),

 

)*

)及び



)*

)の実引数

として用いた場合。


#





 







33 

の実引数として用いた場合。

メンバ関数の



及び



を呼び出した場合。

定値でないメンバ関数を呼び出した場合。ただし ,

 ST









及び



を除く。

上のいずれかの場合に引き続いて( 反復子を返す



及び



を除く。),定値でないメンバ

関数

 ST









又は



を初めて呼び出した場合。

参考 これらの規則は,





を参照カウンタの手法で実装することを許している(そうしなくとも



よい。)

。参照カウンタによる実装は,そうでない実装と同じ意味をもたなければならない。



LY Y &

33



%

L( &



+

%

L&

!

%

ZZ&

''

変更されるのは,

L

だけでなければならない。

  



Q

  







%

P 





6 

%

  





 P

Q

 3

''

 



P &

 

 

33 P 

 P &

 

6 

 P &

 

 

6 33$P





$P &

 

 

6 33



P





 P &

 

 

6 33





 &

 

 

6 33 P









P &

 

 

6 33 



&

 

 

6 33 P







P &

 

処理系定義の型

&

''

+*(L

参照

 

処理系定義の型

P&

''

+*(L

参照

 

33P













P

&

 

33P









P









PP





&





$P 

 

%

VL&

''

+L(*(L

構築/コピー/代入

  

 P 



6 0



%

6  &

 P 



 P0

 &

 P 



 P0



$P 



$P 



%

 



6 0



%

6  &

 P 



!



$P 





6 0



%

6  &

 P 



!





6 0



%

6  &

 P$

P

 







6 0



%

6  &

  

< <

 P<

<









< <





6 0



%

6  &

X P

&

 P0

 % 

 P0

 &

 P0

 % 

!

 &

 P0

 % 

&

''

+L(*(+

反復子



 &

P



&



 &

P



&

P

 &

PP







&


(





 





P

 &

PP







&

''

+L(*(*

容量

$P 

$

&

$P 



&

$P 

 P$

&



$$P 





&



$$P 

 &

$P 

  

&



$P 

P

%

. &



 &



 

&

''

+L(*(M

要素へのアクセス

P 

 ST$

P





&

 

 ST$

P



 &

P 

$P 



&

 

$P 

 &

''

+L(*(/

変更子

 P0

 )% 

 P0

 &

 P0

 )% 

!

 &

 P0

 )% 

&

 P0

  

 P0

 &

 P0

  

 P0



$P 



$P 

 &

 P0

  

!



$P 

 &

 P0

  

!

 &

 P0

 $P 





&

  

< <

 P0

 < <





< <

 &



P  

&

 P0

 

 P0

 &

 P0

 

 P0



$P 



$P 

 &

 P0

 

!



$P 

 &

 P0

 

!

 &

 P0

$P 





&

  

< <

 P0

< <





< <

 &

 P0

$P 

L



 P0

 &

 P0

$P 

L



 P0



$P 

+

$P 

 &

 P0

$P 





!



$P 

 &

 P0

$P 





!

 &

 P0

$P 



$P 





&







&





$P 





&

  

< <





< <



< <

 &

 P0

$P 



%

.

$P 



%

  &





 &









 &

 P0

  $P 

L

$P 

L



 P0

 &

 P0

  $P 

L

$P 

L



 P0



$P 

+

$P 

+ &

 P0

  $P 



$P 

L



!



$P 

+ &

 P0

  $P 



$P 

L



!

 &


)





 





 P0

  $P 



$P 

L

$P 

+



&

 P0

  

L



+



 P0

 &

 P0

  

L



+



!



$P 

 &

 P0

  

L



+



!

 &

 P0

  

L



+

$P 





&

  

< <

 P0

  

L



+

< <

L

< <

+ &

$P 

  !



$P 



$P 



%

.

&



  P

0

 &

''

+L(*(-

文字列操作



!

P

&

''

明示的



!



&

 P 

P 

&

$P 



 

 P0



$P 



%

.

&

$P 



 

!



$P 



$P 



&

$P 



 

!



$P 



%

.

&

$P 



 

$P 



%

.

&

$P 

 

 P0



$P 



%

 

&

$P 

 

!



$P 



$P 



&

$P 

 

!



$P 



%

 

&

$P 

 

$P 



%

 

&

$P 

PP 



 P0



$P 



%

.

&

$P 

PP 



!



$P 



$P 



&

$P 

PP 



!



$P 



%

.

&

$P 

PP 



$P 



%

.

&

$P 

PP

 

 P0



$P 



%

 

&

$P 

PP

 

!



$P 



$P 



&

$P 

PP

 

!



$P 



%

 

&

$P 

PP

 

$P 



%

 

&

$P 

PPP







 P0



$P 



%

.

&

$P 

PPP







!



$P 



$P 



&

$P 

PPP







!



$P 



%

.

&

$P 

PPP







$P 



%

.

&

$P 

PPP

 

 P0



$P 



%

 

&

$P 

PPP

 

!



$P 



$P 



&

$P 

PPP

 

!



$P 



%

 

&

$P 

PPP

 

$P 



%

 

&

 P

 $P 



%

.

$P 



%

 

&



  

 P0



&



 $P



L

$P 

L



 P0



&



 $P



L

$P 

L



 P0



$P 

+

$P 

+

&








 







  

!



&



 $P



L

$P 

L



!



&



 $P



L

$P 

L



!



$P 

+

&

R&

R







のコンスト ラクタ,コピー 及び 代入





のすべてのコンストラクタでは,実引数



6 

のコピーを使って,コンストラクタ 又は オブジェクト生存期間中のメンバ関数が記憶域の割付けを行う。



   

:  )



,

:  

効果  クラス





のオブジェクトを構築する。この関数の事後条件を



に示す。







 

6 0

の効果

要素



コピー可能な非空ポインタ。終端の

が付加してあってもよい。

$

  

未規定の値

   

 /  (  (:    0 )

 

   

 /  (  (:    0 )

 (

'

 (

'



,

 (

 

:  )



,

:  

要件  



%

($



例外  





($

の場合,

 





を送出する。



効果  クラス





のオブジェクトを構築し ,

*

に示すとおり,文字列の初期値の実効長



を,



($

V



の小さいほうの値とする。第



の形式の場合,

6 

の値には,

(

 

によってコピーされたものを使用する。

*







$

 

$

 



6 0

の効果

要素



割り付けられた,長さ



の領域の先頭要素へのポインタ。この領域には,





から



個の要素がコピーされる。

$



  

$

以上の値

   

  $

(

'

(

 

:  )



,

:  

要件  



は,空ポインタであってはならない。更に,





 

でなければならない。



参考 この段落は,意図的に空にしてある。

効果  クラス





のオブジェクトを構築し,



に示すとおり,文字列の初期値を,先頭要素が



によっ

て示される長さ





型配列から決定する。





 

!7

$

 7



6 0

の効果

要素



割り付けられた領域の先頭要素へのポインタ。この領域には,

先頭要素が



で指される配列の最初の



文字がコピーされる。

$



  

$

以上の値


*





 





   

  $

(

 

:  )



,

:  

要件  



は,空ポインタであってはならない。

効果  クラス





のオブジェクトを構築し,



に示すとおり,文字列の初期値を,先頭要素が



によっ



て示される長さ

33



型配列から決定する。





 

!



6 0

の効果

要素



割り付けられた領域の先頭要素へのポインタ。この領域には,先

頭要素が



によって示される配列の最初の

33

個の文字がコピーされる。

$

33

  

$

以上の値

参考

33

を使用する。



  '

(

  

(

 

:  )



,

:  

要件  





 

でなければならない。



参考 この段落は,意図的に空にしてある。



効果  クラス





のオブジェクトを構築し ,



に示すとおり,



個の全要素について文字様オブジェク



を繰り返すことによって,文字列の初期値を決定する。





$

 





6 0

の効果

要素



割り付けられた領域の先頭要素へのポインタ。各要素は

の値で初期化される。

$



  

$

以上の値

/

==  0

  == 

(

== 

(

 

:  )



,

:  

効果  

< <

が汎整数型の場合,次と同じ 。



 P



P 





$

P









 P  

P









そうでない場合,列に対する要件の表(



)に従って,

7,

の範囲内の値から文字列を構築する。

 /  (  (:    0 )

  ,  

 /  ( ( :     0)

 

効果  

!



が同じオブジェクトではない場合,



に従って

!

を変更する。





 % 



 



6 0

の効果

要素



先頭要素が

(

で指される配列のコピーの先頭要素を指すポインタ。

$

($

  

$

以上の値

!



が同じオブジェクトの場合には,何も起こらない。

返却値  

!



 /  (  (:    0 )

  ,  

  $

 

返却値  

!

%



  





6









とする。



参考

33

を使用する。



 /  (  (:    0 )

  ,   

 

返却値  

!

%



  





6







L

とする。










 











の反復子

 

 

  



 

返却値  文字列中の先頭文字を参照する反復子とする。



 

 

  



 

返却値  文字列の末尾の次を指す反復子とする。



!  

 

  !  



 

返却値  意味的に





と同等な反復子とする。



!  

 

  !  



 

返却値  意味的に





と同等な反復子とする。









の容量に関する操作

'

'

 

返却値  文字列がその時点で保持している文字様オブジェクトの個数とする。



'



 

返却値  

$

とする。



'

'

 

返却値  文字列の最大長とする。



参考 コンテナに関する要件(



)を参照。



! 

' '

(

  

 

要件  



%



$

例外  







$

の場合,





を送出する。



効果  

!

の指す文字列の長さを次のとおりに変更する。



%

$

の場合,

!

を,長さが



の文字列であって,その要素が,元の文字列の要素を先頭から

順にコピーしたものである文字列で置き換える。





$

の場合,

!

の指す文字列を,長さが



の文字列であって,その要素が,元の文字列の要

素を先頭から順にコピーし ,残りの要素を

で埋めたものである文字列で置き換える。

! 

' '

 

効果  

$ 

'



 

返却値  文字列に割り付けられている記憶域の容量とする。

! 

 ! '

 , 

メンバ関数



は,オブジェクト





に対し ,サイズの変更を通知するための指令とする。オブ



ジェクト





は,この指令に応じて記憶域割付けを管理することができる。

効果  



実行後,

  

の返す値は,



の実引数の値以上となる。



参考

  

より小さい値を実引数





とした



の呼出しは,実質的には,記憶域の縮小

要求となる。





%

$

の場合,現在の文字列長への縮小要求となる。








 





例外  









$

の場合,





を送出する。









! 

 

効果  次の関数呼出しと同等。





 &

 



 

返却値  

$

%%

.

とする。









の要素へのアクセス

   

  *+ '

 

 

 

  *+ '

  

返却値  





$

の場合,

 S T

とする。



%%

$

の場合,



版では



とする。そ



れ以外の場合の動作は,未定義とする。

   

 '

 

 

 

 '

  

要件  





$



例外  



%

$

の場合,

 





を送出する。



返却値  

 ST 

とする。



#





の変更操作

#



33 )

%

 /  (  (:    0 )

  %,  

 /  (  (:    0)

 

返却値  

 

とする。



 /  (  (:    0 )

  %,  

  $

 

返却値  

!

)%



  



 6











とする。



参考

33

を使用する。



 /  (  (:    0 )

  %,   

 

返却値  

!

)%



  



 6









L

とする。



#



33 

 /  (  (:    0 )

  

 /  ( 0 )

 

返却値  

 

.

 

とする。



 /  (  (:    0 )

  

 /  ( 0 )

 (

'

 (

'

 

要件  



%

($



例外  





($

の場合,

 





を送出する。



効果  

追加する文字列の実効長



を,



及び

($

V



のいずれか小さいほうとする。ここで,

$



%

 

V



の場合,





を送出する。そうでない場合,この関数は,

!

の指す文字列を次のとお

りの文字列に置き換える。

長さは,

$

)



とする。

先頭から

$

個の要素は,元の

!

の指す文字列をコピーしたもの。

残りの



個の要素は,



の指す文字列を



が指す要素から順にコピーしたもの。









は,

"   

を用いるので,それが何か例外を送出するかもしれない。








 





返却値  

!

とする。

 /  (  (:    0 )

  

  $

(

'

 

返却値  

 

  



 6



 









とする。



 /  (  (:    0 )

  

  $

 

返却値  

 

  



 6



 







とする。

参考

33

を使用する。

 /  (  (:    0 )

 '

(

  

 

返却値  

 

  



 6



 







とする。

/

==  0

 )

 == 

 (

== 

 

返却値  

 

  



 6



 









 





とする。



! 

 4   



効果  

 

$

 L

に同等とする。



#



33

 /  (  (:    0 )

  

 /  ( 0 )

 

返却値  



.

 

とする。



 /  (  (:    0 )

  

 /  ( 0 )

 (

'

 (

'

 

要件  



%

($



例外  





($

の場合,

 





を送出する。



効果  

代入する文字列の実効長



を,



及び

($

V



のいずれか小さいほうとする。この関数は,

!



の指す文字列を,長さが



で,その内容は,



の指す文字列を



が指す要素から順にコピーした文字列に置

き換える。

返却値  

!

とする。

 /  (  (:    0 )

  

  $

(

'

 

返却値  



  



 6



 









とする。



 /  (  (:    0 )

  

  $

 

返却値  



 



6 

とする。

参考

33

を使用する。

 /  (  (:    0 )

 '

(

  

 

返却値  



  



 6



 







とする。

/

==  0

 )

 == 

 (

== 

 

返却値  



  



 6



 









 





とする。










 





#



33

 /  (  (:    0 )

  '

 (

 

 /  ( ( :    0)

 

返却値  

 L 

 .

 



とする。



 /  (  (:    0 )

  '

 (

 

 /  ( ( :    0)

 (

'

 1(

'

 

要件  

L

%

$

かつ

+

%

($

でなければならない。



例外  

L



$

又は

+



($

の場合,

 





を送出する。



効果  

追加する文字列の実効長



を,



及び

($

V

+

のいずれか小さいほうとする。ここで,

$



%

 

V



の場合





を送出する。そうでない場合,この関数は,

!

の指す文字列を次のとお

りの文字列に置き換える。

長さは,

$

)



とする。

先頭から

L

個の要素は,元の

!

の指す文字列を先頭要素から順にコピーしたもの。

次の



個の要素は,



の指す文字列を



が指す要素から順にコピーしたもの。

残りの要素は,元の

!

の指す文字列のうち,最初の

L

個に続くコピーされなかった要素を順にコ

ピーしたもの。

返却値  

!

とする。

 /  (  (:    0 )

  '

 (

 

  $

(

'

 

返却値  

  

  



 6









 

とする。



 /  (  (:    0 )

  '

 (

 

  $

 

返却値  

  

  



 6











とする。

参考

33

を使用する。

 /  (  (:    0 )

  '

 (

'

(

  

 

返却値  

  

  



 6











とする。

 

   

(

  

 7

要件  

は,

!

に対する有効な反復子でなければならない。



効果  

が参照する文字の前に,

のコピーを挿入する。



返却値  挿入された文字を指す反復子とする。



! 

   

(

'

(

  

 

要件  

は,

!

に対する有効な反復子でなければならない。



効果  

が参照する文字の前に,

のコピーを



個挿入する。



/

==  0

! 

   

(

== 

 (

== 

 

要件  

は,

!

に対する有効な反復子でなければならない。

7,

は,正しい範囲でなければならない。



効果  



V









に同等とする。










 





##



33

 /  (  (:    0 )

  '

 

,

(

'



,

  

要件  



%

$



例外  





$

の場合,

 





を送出する。



効果  削除する文字列の実効長



を,



及び

$

V



のいずれか小さいほうとする。この関数は,

!



の指す文字列を次のとおりの文字列に置き換える。

長さは,

$

V



とする。

先頭から



個の要素は,元の

!

の指す文字列を先頭要素から順にコピーしたもの。

残りの要素は,元の

!

の指す文字列のうち,



)



の位置にある要素から順にコピーしたもの。

返却値  

!

とする。



 

   

 

要件  

は,

!

に対する有効な反復子でなければならない。

効果  

が指す文字を削除する。



返却値  

削除以前に,

の直後に存在した文字を指す反復子とする。そのような要素が存在しない場合,



とする。

 

   

 (

 

 

要件  



及び



は,

!

に対する有効な反復子であり,

7,

は正しい範囲でなければならない。

効果  

7,

の範囲に含まれる文字を削除する。

返却値  他の要素が削除される前に,



が指していた要素を指す反復子とする。そのような要素が存在しない場



合,



とする。

#(



33  

 /  (  (:    0 )

 '

 (

'

(

 

 /  (  (:    0 )

 

返却値  

   L

L



.

 

とする。



 /  (  (:    0 )

 '

 (

'

(

 

 /  (  (:    0 )

 (

'

 1(

'

1 

要件  

L

%

$

かつ

+

%

($

でなければならない。



例外  

L



$

又は

+



($

の場合,

 





を送出する。



効果  削除する文字列の実効長



を,

L

及び

$

V

L

のいずれか小さいほうとする。挿入する文字列の



実効長



を,

+

及び

($

V

+

のいずれか小さいほうとする。

例外  

$

V



%

 

V



の場合,





を送出する。そうでない場合,この関数は,

!

の指す文字列を次のとおりの文字列に置き換える。

長さは,

$

V



)



とする。

先頭から

L

個の要素は,元の

!

の指す文字列を先頭要素から順にコピーしたもの。

次の



個の要素は,



の指す文字列を

+

が指す要素から順にコピーしたもの。

残りの要素は,元の

!

の指す文字列の

L

)



で示される要素から順にコピーしたもの。

返却値  

!

とする。



 /  (  (:    0 )

 '

 (

'

(

 

  $

(

'

1 

返却値  

    L





  





6









 +

とする。

 /  (  (:    0 )

 '

 (

'

(

 

  $

 


#





 





返却値  

   

L 

  



 6











とする。

参考

33

を使用する。

 /  (  (:    0 )

 '

 (

'

(

'

1(

  

 

返却値  

    L





  





6









+

とする。



 )

  

(

 

1(

 

 )

 

要件  

L

及び

+

は,

!

に対する有効な反復子であり,

7L,+

は,正しい範囲でなければならない。



効果  

!

の指す文字列を次のとおりの文字列に置き換える。



長さは,

$

V

+

V

L

)

($

とする。

先頭から



V

L

個の要素は,元の

!

の指す文字列を先頭要素から順にコピーしたもの。

続く

($

個の要素は,



の指す文字列を先頭要素から順にコピーしたもの。

残りの要素は,元の

!

の指す文字列のうち

+

で示される要素から順にコピーしたもの。

返却値  

!

とする。



参考 このメンバ関数呼出しの後,文字列の長さは,

($

V

+

V

L

となる。



 )

  

(

 

1(

 

  $

(

'

 

返却値  

  L + 





 

とする。



参考

文字列の長さは,



V

+

V

L

となる。



 )

  

(

 

1(

 

  $

 

返却値  

  L + 







とする。



参考

文字列の長さは,

33

V

+

V

L

となる。

33

を使用する。



 )

  

(

 

1(

'

(

  

 

返却値  

  L + 







とする。



参考

文字列の長さは,



V

+

V

L

となる。



/

==  0

 )

  

(

 

1(

== 

D(

== 

D1 

返却値  

  L + 





L +

とする。



参考

文字列の長さは,

+

V

L

V

+

V

L

となる。



#)



33  

'

    $

(

'

(

'

 

,



 

要件  



%

$

でなければならない。



例外  





$

の場合,

 





を送出する。



効果  

コピーされる文字列の実効長



を,



及び

$

V



のいずれか小さいほうとする。



の指す文字列



は,少なくとも



個の要素をもつ配列でなければならない。この関数は,



の指す文字列を,長さが



で,そ

の内容が,

!

の指す文字列のうち



で示される要素から順にコピーしたものに置き換える。この関数は,



指す文字列の最後に空オブジェクトを追加しない。

返却値  



とする。



#



33

! 

  /  (   ( :     0)

 

効果  二つの文字列の内容を交換する。



要件  

この関数を実行した後では,

!

の内容は,実行前に



が保持していた内容となり,



の内容は,

!



保持していた内容となる。

計算量  定数時間。




(





 





(





の文字列操作

 

  $



 

返却値  

長さが

$

)

L

の配列の先頭要素へのポインタとする。この配列の先頭から

$

個の要素は,

!



の指す文字列の対応する要素と等しい。最後の要素は,



によって示されるナル文字とする。

要件  

プログラムは,この配列内の要素を変更してはならない。クラス





の定値でないメンバ関数の実



行後は,それ以前にこの関数を使って得たポインタ値を有効なものと見なしてはならない。

 

  $



 

返却値  

$

がゼロでない場合,先頭から

$

個の要素が

!

の指す文字列の対応する要素に等しいよう



な配列の先頭要素へのポインタとする。

$ %%.

の場合,コピー可能な空ポインタでないポインタとする。

要件  

プログラムは,この配列内の要素を変更してはならない。クラス





の定値でないメンバ関数の実



行後は,それ以前にこの関数を使って得たポインタ値を有効なものと見なしてはならない。

  

 

 

返却値  文字列の構築に使われる

6 

のオブジェクトとする。

(



33

'

  

 /  ( ( :     0)

 (

'

 

,



 

効果  可能ならば,次の条件を満たす最小の値



を見つける。





%



かつ



)

($

%

$

となる。



の指す文字列内のすべての要素

/

について,

 

)/

%%

(

/

となる。

返却値  上記の



が見つかった場合,



とする。見つからなかった場合,

 

とする。



参考

33

を使う。



'

  

  $

(

'

 (

'



 

返却値  



  





6











 



とする。



'

  

  $

(

'

 

,



 

返却値  



  





6









 



とする。

参考

33

を使う。



'

   

(

'

 

,



 

返却値  



  





6







L

 



とする。

(



33

'

  

 /  (  (:    0)

 (

'

 

,

 

 

効果  可能ならば,次の条件を満たす最大の値



を見つける。





%



かつ



)

($

%

$

となる。



の指す文字列内のすべての要素

/

について,

 

)/

%%

(

/

となる。

返却値  上記の



が見つかった場合,



とする。見つからなかった場合,

 

とする。



参考

33

を使う。



'

  

  $

(

'

 (

'



 

返却値  



  



 6









 



とする。



'

  

  $

(

'

 

,

 

 

返却値  



  



 6













とする。

参考

33

を使う。



'

   

(

'

 

,

 

 

返却値  



  



 6







L

 



とする。


)





 





(



33





'

    

 /  ( ( :     0)

 (

'

 

,



 

効果  可能ならば,次の条件を満たす最小の値



を見つける。





%



かつ





$

となる。



の指す文字列内のある要素

/

について,

 

%%

(

/

となる。

返却値  上記の



が見つかった場合,



とする。見つからなかった場合,

 

とする。



参考

33

を使う。



'

    

  $

(

'

 (

'



 

返却値  







  





6









 

 



とする。



'

    

  $

(

'

 

,



 

返却値  







  





6











とする。

参考

33

を使う。



'

     

(

'

 

,



 

返却値  







  





6







L



とする。

(



33





'

   

 /  (  (:     0)

 (

'

 

,

 

 

効果  可能ならば,次の条件を満たす最大の値



を見つける。





%



かつ





$

となる。



の指す文字列内のある要素

/

について,

 

%%

(

/

となる。

返却値  上記の



が見つかった場合,



とする。見つからなかった場合,

 

とする。



参考

33

を使う。



'

   

  $

(

'

 (

'



 

返却値  







  



 6

















とする。



'

   

  $

(

'

 

,

 

 

返却値  







  



 6











  



とする。

参考

33

を使う。



'

    

(

'

 

,

 

 

返却値  







  



 6









L



とする。

(#



33







'

     

 /  ( ( :     0)

 (

'

 

,



 

効果  可能ならば,次の条件を満たす最小の値



を見つける。





%



かつ





$

となる。



の指す文字列内のすべての要素

/

について,

 

%%

(

/

とならない。

返却値  上記の



が見つかった場合,



とする。見つからなかった場合,

 

とする。



参考

33

を使う。










 





'

     

  $

(

'

 (

'



 

返却値  









  





6











 



とする。



'

     

  $

(

'

 

,



 

返却値  









  





6









 



とする。

参考

33

を使う。



'

      

(

'

 

,



 

返却値  









  





6







L

 



とする。

((



33







'

    

 /  (  (:     0)

 (

'

 

,

 

 

効果  可能ならば,次の条件を満たす最大の値



を見つける。





%



かつ





$

となる。



の指す文字列内のすべての要素

/

について,

 

%%

(

/

とならない。

返却値  上記の



が見つかった場合,



とする。そうでない場合,

 

とする。



参考

33

を使う。



'

    

  $

(

'

 (

'



 

返却値  









  



 6









 





とする。



'

    

  $

(

'

 

,

 

 

返却値  









  



 6















とする。

参考

33

を使う。



'

     

(

'

 

,

 

 

返却値  









  



 6









L





とする。

()



33 

 /  (  (:    0

 '

 

,

(

'



,

 

 

要件  



%

$



例外  





$

の場合,

 





を送出する。



効果  

コピーすべき文字列の実効長



を,



及び

$

V



の小さいほうとする。



返却値  



  



 6













 )

 

とする。



(



33  



    

 /  ( ( :    0)



 

効果  

比較すべき文字列の実効長



を,

$

及び

($

の小さいほうとして決定する。そして,二つの



文字列を

33  







(



を呼び出すことによって,比較する。

返却値  比較の結果が非ゼロの場合,非ゼロの値とする。そうでない場合,表



に示す値とする。





 

の結果

条件

返却値

$



($



$

%%

($

$



($




*





 







   '

 (

'

(

 

 /  ( ( :    0)



 

返却値  次の値とする。



 P 

 





 6



 





!







L 

L

(











   '

 (

'

(

 

 /  ( ( :    0)

 (

'

 1(

'

1

 

返却値  次の値とする。



 P 

 





 6



 





!







L 

L

(







 P 









6











  

+

 +



    

  

$

 

返却値  

V  





  



 6











とする。



   '

 (

'

(

 

  

$

 

返却値  次の値とする。



 P 

 





 6



 





!







 L

(



 





 P 









6











   '

 (

'

(

 

  

$(

'

1

 

返却値  次の値とする。

 P 

 





 6



 





!







 L

(



 





 P 









6









 

+

)





の非メンバ関数

)

 )

/

  (



 (



:  0

 /  (  (:     0

  %  

 /  (  (:    0)

 (

 

 /  (  (:    0)

 

返却値  



  



 6













(









とする。



/

  (



 (



:  0

 /  (  (:     0

  %  

  $

 (

 

 /  (  (:    0)

 

返却値  



  



 6













)



とする。



参考

33

を使う。



/

  (



 (



:  0

 /  (  (:     0

  %   

 (

 

 /  (  (:    0)

 

返却値  



  



 6









L





)



とする。



/

  (



 (



:  0

 /  (  (:     0

  %  

 /  (  (:    0)

 (

 

  $

 


 





 





返却値  



)



  



 6











とする。

参考

33

を使う。



/

  (



 (



:  0

 /  (  (:     0

  %  

 /  (  (:    0)

 (

  

 

返却値  



)



  



 6







L

 



とする。

)

 %%

/

  (



 (



:  0

 

  ,,  

 /  (  (:    0 )

 (

 

 /  (  (:    0 )

 

返却値  

(  

%%

.

とする。



/

  (



 (



:  0

 

  ,,  

  $

 (

 

 /  (  (:    0 )

 

返却値  



  



 6













%%



とする。



/

  (



 (



:  0

 

  ,,  

 /  (  (:    0 )

 (

 

  $

 

返却値  



%%



  



 6



 









とする。



参考

33

を使う。



)

 [%

/

  (



 (



:  0

 

  -,  

 /  (  (:    0 )

 (

 

 /  (  (:    0 )

 

返却値  

[

%%



とする。



/

  (



 (



:  0

 

  -,  

  $

 (

 

 /  (  (:    0 )

 

返却値  



  



 6













[%



とする。



/

  (



 (



:  0

 

  -,  

 /  (  (:    0 )

 (

 

  $

 

返却値  



[%



  



 6



 









とする。



参考

33

を使う。



)

 

/

  (



 (



:  0

 

  /

 

 /  (  (:    0 )

 (

 

 /  (  (:    0 )

 

返却値  

(  



.

とする。



/

  (



 (



:  0

 

  /

 

  $

 (

 

 /  (  (:    0 )

 

返却値  



  



 6

















とする。




 





 





/

  (



 (



:  0

 

  /

 

 /  (  (:    0 )

 (

 

  $

 

返却値  







  



 6











とする。



)#

 

/

  (



 (



:  0

 

  0

 

 /  (  (:    0 )

 (

 

 /  (  (:    0 )

 

返却値  

(  



.

とする。



/

  (



 (



:  0

 

  0

 

  $

 (

 

 /  (  (:    0 )

 

返却値  



  



 6

















とする。



/

  (



 (



:  0

 

  0

 

 /  (  (:    0 )

 (

 

  $

 

返却値  







  



 6











とする。



)(

 %

/

  (



 (



:  0

 

  /,  

 /  (  (:    0 )

 (

 

 /  (  (:    0 )

 

返却値  

(  

%

.

とする。



/

  (



 (



:  0

 

  /,  

  $

 (

 

 /  (  (:    0 )

 

返却値  



  



 6













%



とする。



/

  (



 (



:  0

 

  /,  

 /  (  (:    0 )

 (

 

  $

 

返却値  



%



  



 6



 









とする。



))

 %

/

  (



 (



:  0

 

  0,  

 /  (  (:    0 )

 (

 

 /  (  (:    0 )

 

返却値  

(  

%

.

とする。



/

  (



 (



:  0

 

  0,  

  $

 (

 

 /  (  (:    0 )

 

返却値  



  



 6













%



とする。



/

  (



 (



:  0

 

  0,  

 /  (  (:    0 )

 (

 

  $

 

返却値  



%



  



 6



 









とする。










 





)



/

  (



 (



:  0

! 

  /  (   (:    0 )

 (

 /  (  (:    0 )

 

返却値  

( 

とする。



)*

挿入操作 及び 抽出操作

/

  (



 (



:  0

 /  (  0 )

  00  /    (   0)

(

 /  ( ( :     0)

 

効果  次の手順で処理を行う。





クラス



のオブジェクト



を,次の形で構築されたものとして構築する。

 

 P 



 





3

3













が真のとき,

(

を呼び出して



から文字を抽出し ,それらを



に追加する。そ

の際,

( L



が呼び出されたものと見なす。



(

より大きい場合,追加される文字数の最大値



は,

(

とする。そうでない場

合,



は,

(

$

に等しい。次に示す条件のいずれかが発生するまで,文字の抽出 及び 追加が

行われる。



個の文字が格納された。

入力列がファイルの終わりに到達した。

次の入力文字



について,

  

 ( 

が真となった。

最後の文字( もしそれが存在するなら )が抽出された後,

(.

が呼ばれ,クラス



のオブジェクト





は,解体される。

この関数が文字を一つも抽出しなかった場合,

(33







を呼び 出す。これが ,



33



 

)

)を送出するかもしれない。

返却値  



とする。



/

  (



 (



:  0

  /  (

 0)

  //   /    (

 0)

(

 

 /  (  (:    0 )

 

効果  次の手順で処理を行う。





クラス



のオブジェクト



を,次の形で構築されたものとして構築する。

 

 P 



 





3

3













が真のとき,

(  V 



(







を呼び出したのと同じ扱いで,文字を挿

入する。ここで,



は,

(

及び

($

のいずれか大きいほうとする。この際の詰め物は,

   

の段階



に示すとおりに処理される。



(.

を呼び出す。



 

の呼出しが失敗した場合,

(

33

を呼び出す。

返却値  



とする。

/

  (



 (



:  0

 /  (  0 )

  /   (   0)

(

 /  ( ( :    0)

 (

  

 

効果  次の手順で処理を行う。





クラス



のオブジェクト



を,次の形で構築されたものとして構築する。

 

 P 



 





3

3







 


 





 











が真のとき,

(

を呼び出して



から文字を抽出し ,それを



の指す文字列に追

加する。その際,

( L



が呼び出されたものと見なす。



次に示す条件のいずれかが発生するまで,文字の抽出 及び 追加が行われる。

入力列がファイルの終わりに到達した(この場合,関数



は,

(

33

を呼び出す。)

次の入力文字



について,



%%



となった(この場合,



はストリームから取り出され

るが,文字列に追加されない。)

)

参照)

(

$

個の文字が抽出された(この場合,関数



は,

(

33

を呼ぶ。)

)

参照)

これらの条件は,上に示した順にテストされる。



最後の文字が読み込まれた後,クラス



のオブジェクト



は,解体される。



文字も読み込まれなかった場合,

(

33

が呼ばれる。これが



33 

)

)を送出するかもしれない。

返却値  



とする。

/

  (



 (



:  0

 /  (  0 )

  /   (   0)

(

 /  ( ( :    0)



返却値  

 



(



Z

4

Z

とする。





ナル文字終端列ユーティリティ 表

#

(

)



及び

*

は,それぞれヘッダ

  



   

 

  

及び

 

( 多バイト変換)を規定する。

#

ヘッダ

  

の一覧

種別

名前  

関数

 



 

 



 

 

  

 

 

 



  

(

ヘッダ

   

の一覧

種別

名前

マクロ

I8B9

   

 



  







   

関数

 

  



  

 

 

 



 

 



  

 

 

  

 

 

)

ヘッダ

 

の一覧

種別

名前

マクロ

AG??

 

$



 

関数

 

 

  

 



 

 



 

 

 

 



 



 

 

 



 

 




 





 







ヘッダ

  

の一覧

種別

名前

マクロ

AG??

   

I7;6E

@65

I7;6E

@<A

I8B9

  









   

$



関数



 



  

 

 





 

   

  

 





 

 

 

 

 



 

 

 



 

 

 

  

 







  

  

 

 

 

 

  

  

  

 

 

 

  

  

  



 

  

  

 

*

ヘッダ

 

の一覧

種別

名前

マクロ

@"

7GE

@65

関数







 



 



 





 

これらのヘッダの内容は,標準

"

ライブラリのヘッダ

  (

  (

(

 (

及び



(

に等しい。ただし ,次に述べる変更がある。

どのヘッダも,型

 



を定義してはならない(



参照)



関数呼出し情報

  

!



は,次の二つの宣言で置き換える。





!

  

!





&

!

 

!





&

これらの動作は,元の宣言と同じとする。

関数呼出し情報

  

!



!

は,次の二つの宣言で置き換える。





!

  

!

L



!

+ &

!

 

!

L



!

+ &

これらの動作は,元の宣言と同じとする。

関数呼出し情報

  

!



は,次の二つの宣言で置き換える。



!

  

!





&

!

 

!





&

これらの動作は,元の宣言と同じとする。

関数呼出し情報

 

!



!

は,次の二つの宣言で置き換える。





!

 

!

L



!

+ &

!



!

L



!

+ &

これらの動作は,元の宣言と同じとする。



関数呼出し情報

  

!



$



は,次の二つの宣言で置き換える。





!

  

!





$P

 &

!

 

!





$P

 &

これらの動作は,元の宣言と同じとする。



関数呼出し情報

   

 

!

 



は,次の二つの宣言で置き換える。





 P!

   

 P!



 P

&

 P!

  

 P!



 P

&


 #





 





これらの動作は,元の宣言と同じとする。



関数呼出し情報

   

 

!



 

!

は,次の二つの宣言で置き換える。





 P!

   

 P!

L



 P!

+ &

 P!

  

 P!

L



 P!

+ &

これらの動作は,元の宣言と同じとする。



関数呼出し情報

   

 

!

 



は,次の二つの宣言で置き換える。





 P!

   

 P!



 P

&

 P!

  

 P!



 P

&

これらの動作は,元の宣言と同じとする。



関数呼出し情報

  

 

!



 

!

は,次の二つの宣言で置き換える。





 P!

  

 P!

L



 P!

+ &

 P!

 

 P!

L



 P!

+ &

これらの動作は,元の宣言と同じとする。



関数呼出し情報

  

 

!



$



は,次の二つの宣言で置き換える。





 P!

  

 P!



 P

$P

 &

 P!

 

 P!



 P

$P

 &

これらの動作は,元の宣言と同じとする。



参照  

6





)

))

)

及び

)

6





追補





#

及び

(



現地化ライブラリ



では,

"##

プログラムにおいて文化的な違いをカプセル化しプログラムの移植性を向



上させるために用いられる部品群について規定する。現地化を行う現地特性の機能を次に示す。

文字のクラス分け

文字列照合順序

数値,金額,日時などの書式指定 及び 構文解析

メッセージ検索



で規定する項目を

#

に示す。



#

 現地化ライブラリの要約

箇条

ヘッダ



現地特性

 



標準

 

カテゴ リ



"

ライブラリの現地特性

  



現地特性

ヘッダ

 

の一覧

  



Q

''

++(L(L

現地特性



 &

 

 

9 



9 0

P  

 0 &

 

 

9 



P  

 0

 &

''

++(L(*

便利なインタフェース

 

 





  

 



 0

 &

 

 





 

 



 0

 &

 

 





 

 



 0

 &

 

 





 

 



 0

 &

 

 







 



 0

 &

 

 





 

 



 0

 &

 

 







 



 0

 &

 

 





  

 



 0

 &

 

 





  



 0

 &

 

 





 

 



 0

 &

 

 





 

 



 0

 &


 (





 





 

 





  



 0

 &

 

 





 



 0

 &

''

++(+(L

及び

++(L(*

 



 P&

 

 





 &

 





  &

''

特殊化

 

 





 P&

 





 P 



&

''

特殊化



 P&

 

 





 







 &

 

 





 







 P&

''

++(+(+

及び

++(+(*

数値

 

 





< <



 P&

 

 





B  <



 P &

 

 





   &

 

 





   P&

''

++(+(M

文字列照合順序

 

 





&

 

 





P&

''

++(+(/

日付 及び 時間



P&

 

 





< <



P&

 

 





< <



PP&

 

 





B  <



P &

 

 





B  <



P P&

''

++(+(-

金額



P&

 

 





< <



P&

 

 





B  <



P &

 

 





<



  &

 

 





<



  P

&

''

++(+(,

メッセージ検索



P&

 

 





&

 

 





P&

R

ヘッダ

 

では,現地特性固有の情報をカプセル化し操作するための,クラスの定義 及び 関数の宣言を行っ



ている。









クラス

 

  



Q



 

Q

 3

''



 &



&

 



&







''

ここで代入されている値は,説明のためだけ



%

.



%

. .L.

 

%

. .+.



%

. .M.

 

%

. .N.



%

. L..



%

. +..



%



1

 

1



1

 

1



1

&

''

構築,複製 及び 解体









では,型名

$



は,



で定義された不完全型とする。


 )





 





 

 &

  

 0



 &

  

  

!

P &

  

 0





!

P

 &

 

 

9 

  

 0



9 !

 &

  

 0





 0



 &

X 

 &

''

非仮想関数



 0

 % 

 0



 &

 

 

9 

 

 

 0



&

''

 

に対する操作

 P 





&



 %% 

 0



&



 [% 

 0



&

 

 









6 



   

 P 



 





 6







0

L



 P 



 





 6







0

+

&

''

大域的

 

オブジェクト



 

 

 0 &





 0

  &

R&

R

現地特性クラス

 

は,型安全で多相的な特性項目の集合を,特性項目を表す型

 

を索引として実現



する。すなわち,特性項目は,単なるクラス・インタフェースとしての役割と,現地特性中の一群の特性項目に対す

る索引としての役割との二重の役割を果たす。

現地特性がもつ特性項目にアクセスするには,関数テンプレート



 

又は



 

を用いる。



入出力ストリームの

 

は,例えば次のように実装される。









 

 







 P 



 





0

 

 P 



 





0



#



Q

 

 P











33





 &



 

Q

P33





%

.&



 &

(   

&

P P



 



 









P











 











(  ( 



(



0 

Z Z &

( &

''

例外が送出されるかもしれない

R

 

&

R



 











の呼出しでは,型実引数







によって特性項目が選択され,この型の全メンバが使用可



能になる。







が現地特性に存在しない特性項目を指定している場合,この関数は,標準の例外





を送出す

る。

"##

プログラムは,関数テンプレート



 







を使って,ある現地特性が特定の特性項目を実装

しているかど うかを調べることができる。現地特性に利用者定義の特性項目を取り込ませ,標準の特性項目と同様に

使用することも可能である(

 

参照)

参考

現地特性がもつすべての機能には,



 



 

を介してアクセスする。ただし ,次

に示す例外がある。

メンバ演算子テンプレート

  

7  60 





7  60

提供されていて,文字列照合順序のために,標準集合を指定する述語実引数として,現地特性

を使うことができる。



  

など の従来からある

 

の関数に対応した使いやすい大域的イン

タフェースが用意されており,

"##

プ ログ ラムでは,現地特性オブジェクト





を使って,







$

の呼出しにおいて,ストリームが暗黙のうちに

.$%

 ? /

に変換されることに注意せよ。








 





  





として呼び出すことができる(これによって,既存の抽出子(

)(

)の

格上げがしやすくなる。)



 

の呼出しによって現地特性オブジェクトから得た特性項目への参照は,その特性項目を参照している



現地特性オブジェクトが存在する限り使用することができ,そのメンバ関数の結果をキャッシュして再利用すること

ができる。

現地特性の特性項目メンバ関数は,入出力ストリームの挿入子 若しくは 抽出子の呼出し,又は ストリームバッファ

のメンバ関数の呼出しの最中に何度呼び出されたとしても,同じ値を返さなければならない。

参考 したがって,そのような返却値は,現地特性の特性項目メンバ関数を再び呼ばずに使用することができ

る。また,入出力ストリームクラスのメンバ関数が,自ら

 

を呼び出したのではこの保証がない

( 特に規定する場合を除く。)ことになる。

現地特性が名前をもつのは,次の場合だけとする。

その現地特性が,現地特性名を表す文字列( 例えば ,

YCBF<5Y

)から構築された。

その現地特性が,名前をもつ二つの現地特性の構成要素から構築された。

そうでない現地特性は名前をもたない。名前をもつ現地特性ど うしは,等価性の比較ができる。名前をもたない現

地特性は,自分自身のコピーとの間でだけ等価となる。名前をもたない現地特性の場合,

 33

は,

Y!Y

返す。



 

のもつ型



 33 





 

有効な



の値には,

 

のビットマスク要素としての





 



 





及び



がある。更に,

 

のメンバ



が定義してあり,次の式が

 

となる。

 

1

 

1



1

 

1



1



1



%%



更に,有効な二つの



値に対して,演算子

1

及び 演算子

0

を適用した結果の値も有効とする。これらは,

それぞれ



の和集合 及び 積集合を表す。

 

の メンバ関数が 型



の実引数をもつ場合,その実引数には ,



とし て有効な値,又は



  

で定義されている

?7

JC8

など の定数値を与えなければ ならない。こうし た



の値は,現地

特性のカテゴ リの集団を同定する。現地特性のカテゴ リは,それぞれ,現地特性の特性項目の集団を同定する。その

集団は,それぞれ,少なくとも

#

に示す特性項目を含んでいなければならない。

#

 現地特性カテゴリ 及び その特性項目

カテゴ リ

含まれる特性項目



 

 



 

  

  



   











  

  





   

   



   





   

  



 



 



 

    

    



 

 

 

 



 

 

 

 







 



 





 



 





 

 





 













は,どんな現地特性





及び 特性項目







に対しても,次の二つの条件がともに成



り立てば

 

となる。





が,構築されたものか,

 33  

によって返されたかのいずれかである。







が,標準のカテゴ リのメンバである。

 33 

の実引数をもつ

 

のメンバ関数は,その実引数に対応する特性項目の集合に対して操作

を行う。

処理系は,

#

に示したテンプレートの具現化を提供しなければならない。




 *





 





#

 必要な具現化

カテゴ リ

含まれる特性項目





 



 



 

 

 

 

 



 

  

 









 

 

  





  

  <









  

 

 <



7 < <





7 B  <





 

   

 

   

 



 

7 < <





 

7 B  <









  < <











  <

<









 

 B  <





 

 B  <





  B  <













  B 



<









 

 B  <





 

 B  <







 



 



特性項目

 

 

及び

 

 

のメンバの実装が



 







を呼び出すのは,次の二

つの条件を満たす場合だけとする。

特性項目



が,

    

  

型である。

現地特性



が,これらの関数の



0

実引数に対して

 

メンバを呼ぶことによって得られた

値である。

特性項目の宣言では,

< <

又は

B  <

という名前のテンプレート仮引数は,それぞれ入力



反復子 又は 出力反復子の要件を満足するすべての具現化の集合を表す(



参照)。

7

という名前のテンプレート

仮引数は,文字の要件を満足するすべての具現化の集合を表す。この場合,そのような文字を用いた任意の入出力ス

トリーム要素が具現化可能でなければならない。

<

という名前のテンプレート仮引数は,

%





型の仮

引数として可能なすべての具現化の集合を表す。



クラス

 33 

  



Q



 33 

Q

 3

  

 $P



%

. &

 

X  &

3

  

 0 &

''

定義されない



 % 

 0 &

''

定義されない

R&

R

クラス

 

は,現地特性の特性項目に対する基底クラスとする。あるクラスが特性項目



であるのは,そ



のクラスが他の特性項目から公開派生している場合,又は そのクラスが

 33 

から派生し ,かつ次の形の

公開アクセス可能な宣言を含む場合とする。









3333 33



&



では,特性項目を要求するテンプレート仮引数は,

9 

という名前で宣言される。現地特性の関数に,

( 明示

的に 又は 導出によって )特性項目であることが要求されるテンプレート仮引数として,特性項目でない型を渡すプ

ログラムは,不適格とする。

コンストラクタの実引数



は,生存期間の管理に用いられる。





%%

.

の場合,その特性項目を含む最後の

 

オブジェクトが解体されたときに,処理系が





 33 

!



を実行する。ただし ,



はその特性項目へのポインタとする。



%%

L

の場合,その特性項目を処理系が解体することはない。







これは,要件すべてを尽くしている。他の要件は存在しない。したがって,特性項目クラスは,公開の,コピーコンストラクタ,代入

演算子,省略時コンストラクタ,デストラクタなどをもつ必要がない。








 







で定義する特性項目のコンストラクタは,この実引数をとり,

 

基底クラスのコンストラクタに渡す。





で定義するすべての単一実引数のコンストラクタは,自動的な型変換を避けるため

  

と定義される。

標準の特性項目の中には,それから派生した

:E

E

E

;

という名前の標準クラスが存在するものがある。これ



は,

  

!

に同じ名前を与えることによって構築される現地特性の特性項目と同じ機能をもつ仮想

関数を実装している。このような特性項目は,



!

の実引数(これは現地特性名を表す。)及び 実引数



( これは基底クラスのコンストラクタに渡される。)をもつコンストラクタを提供する。

E

E

E



版の特性項目が

存在しない場合,基底クラスは,名前付きの現地特性の機能を,他の特性項目を参照することによって実現する。



クラス

 33

  



Q



 33

Q

 3

 &

3



 % 

0 &

''

定義されない

 

0 &

''

定義されない

R&

R

クラス

 33

は,現地特性における特性項目インタフェースの識別機能を提供する。これは,検索時の索引



としても,初期化のカプセル化にも用いられる。

参考

特性項目は,静的コンストラクタの実行中にも入出力ストリームによって用いられるので,それの静的



初期化をプログラムの中で行うわけにはいかない。

 

が採用し うる初期化戦略の一つとして,特性

項目のインスタンスが現地特性に組み込まれる最初の時点で,各特性項目のメンバ



を初期化するとい

う方法がある。これは,コンストラクタの実行前に,静的記憶域がゼロに初期化されること(

(

)にだ

け依存している。



 

のコンスト ラクタ 及び デスト ラクタ

 

  

省略時のコンストラクタ。現在の大域的現地特性のスナップショット。



効果  以前に

 33



0

が呼ばれたことがある場合,その最後の呼出しのときに渡された実引数の



コピーを構築する。そうでない場合,結果として得られる特性項目は,

 33 



の結果と同一の機能の仮

想関数をもつ。

参考 このコンストラクタは,一般に,



 0

の実引数をもつ関数の省略時実引数として用いられる。

   

 )

 

  

効果  



をコピーして現地特性を構築する。



 

 )

  ,  

 )

 

  

効果  



のコピーを構築し ,現在の値と置き換える。



返却値  

!



   

  $

 

効果  標準

"

現地特性の名前( 例えば

YCBF<5Y

)を用いて現地特性を構築する。結果として得られる現地特性は,そ



の現地特性名に対して定義されている機能を実装する。

例外  実引数が有効でないかナルの場合,

 



を送出する。

備考

有効な文字列の値は,

Y7Y

YY

及び 処理系定義の値のいずれかとする。

   

 )

  (

 

  $

(

 

 

効果  



をコピーした現地特性を構築する。ただし,実引数



で指定された特性項目は,

 



と同じ機能をもつ。

例外  実引数が有効でないかナルの場合,

 



を送出する。



参考

構築される現地特性は,



が名前をもつときかつそのときに限り名前をもつ。










 







/

>0

   

 )

  (

>$

 

効果  



実引数から,型

9 

以外の全特性項目を引き継いだ現地特性を作成する。次に,第



実引数を残りの特



性項目として取り込む。



がナルの場合,構築されるオブジェクトは,



のコピーになる。

参考

構築された現地特性は名前をもたない。



   

 )

  (

 

 )

(

 

 

効果  



を実装する特性項目を除き,第



実引数から全特性項目を引き継いだ現地特性を構築する。



を実装



する特性項目については,第



実引数の特性項目を引き継ぐ。

参考

構築された現地特性は,最初の二つの実引数が名前をもっているとき,かつそのときに限り名前をもつ。



. 

  

効果  例外を送出しない,非仮想のデストラクタ。





 

のメンバ



/

>0

 

   

 )

 

 

効果  

!

のもつすべての特性項目を引き継いだ現地特性を構築する。ただし,

9 

によって指定される特性項



目は,



の特性項目を引き継ぐ。

返却値  新たに構築された現地特性。



例外  



 9 



が偽のとき,

 



を送出する。



参考

構築された現地特性は,名前をもたない。



 /  0



 

返却値  

!

が名前をもつ場合,それを返す。そうでない場合,文字列

Y!Y

を返す。

!

が名前をもつ場合,

  (



は,

!

と等価とする。得られる文字列の内容は,処理系依存とする。



 

の演算子

 

  ,,  

 )

 

 

返却値  次のいずれかの場合,

 

を返す。



比較対象の現地特性が,同一オブジェクトである場合

一方が他方のコピーである場合

― ど ちらの現地特性も名前をもち,その名前が等しい場合

それ以外の場合,



を返す。

 

  -,  

 )

 

 

返却値  

[!

%%







/

  (



 (



:  0

 

   

 /  (  (:     0)

(

 

 /  (  (:     0)

1

 

効果  二つの文字列を,特性項目

 

に従って比較する。



参考 このメンバ演算子テンプレートは(したがって

 

自身も ),文字列に対して適用される比較判定



テンプレート実引数(

#

)の要件を満たす。

返却値  次に示す式の結果。

P 

 

! (  

L(

L( )

L($

+(

+( )

+($



.&

文字列のベクトル



を,現地特性



の文字列照合順序に従って整列するには,次のとおりに書けばよい



#

及び

 

参照)

33(



(

 &








 





#

 

の静的メンバ



 

   

 )

  

実引数を大域的現地特性として設定する。



効果  

以後のコンストラクタ

 

の呼出しは,その実引数のコピーを返すことになる。その実引数が名前をもっ



ていれば ,次を実行する。

33 ?

7P

6??

 ( ( P

&

そうでない場合,

"

現地特性に対する影響は,処理系定義とする。

 33

以外のライブラリ関数は,

 

の返す値に影響を与えない。

返却値  以前の

 

の値。







 0

  &

"

現地特性。



返却値  旧来の

"

言語限定の現地特性を実装する現地特性。これは,

 Y7Y

の値と同等とする。

参考 この現地特性,その特性項目 及び それらのメンバ関数は,時間がたっても変わらない。





 

の大域的要素



/

>0

 

>)

  

 )

  

要件  

9 

は,その定義に公開静的メンバ



を含む特性項目クラスでなければならない(





返却値  



が対応する特性項目をもつ場合,その特性項目に対する参照。



例外  



 9 

が偽の場合,





を送出する。



備考

返された参照は,



のコピーが存在する限り有効とする。





/

>0

 

  

 )

 

  

返却値  



が要求された特性項目をもつとき真,それ以外のとき偽 。



便利なインタフェース



文字の分類

 

 





  

 



 0

 &

 

 





 

 



 0

 &

 

 





 

 



 0

 &

 

 





 

 



 0

 &

 

 







 



 0

 &

 

 





 

 



 0

 &

 

 







 



 0

 &

 

 





  

 



 0

 &

 

 





  



 0

 &

 

 





 

 



 0

 &

 

 





 

 



 0

 &

これらの関数



は,次に示す式の値を返却値として返す。



P 

  



 (  P

3

3

ここで,



は,その関数に対応する

 

33

の値とする(

 

参照)









文字変換



/

  0

  

    

(

 

 )

  

返却値  



    



 ( 





/

  0

  

     

(

 

 )

  

返却値  



    



 (









ループの中で用いられる場合,

 

特性項目をキャッシュしてそれを直接使うか,

 

のベクトル形式を使うかするほ

うがより高速に扱える。








 







標準現地特性カテゴリ

それぞれの標準カテゴ リは,一群の特性項目からなる。それらの内の幾つかは,標準



又は 利用者定義の入出力ストリーム演算子



及び



(それぞれ,メンバ関数



及び



に同じ 。)の中で,

データの書式制御 及び 構文解析に用いられる。そのようなメンバ関数は,



0

を実引数とする。この実引数

はメンバ



 

及び



をもち,対応するデータの書式を制御する。他の特性項目を使用す

ることが必要な関数は,

 

メンバ関数を呼んでそこに浸透している現地特性を取り出す。書式制御用特性項

目は,必要に応じて,文字型の実引数



を使用して必要な文字幅を埋める。

メンバ



は,エラーを報告するための機能をもたない( 実引数

B  <

における失敗は,返された反



復子から取り出す必要がある。)

。メンバ



は,



330

実引数を



個もつが,その値を無視する。

ただし ,構文解析エラーが発生した場合は,



33

をセットする。

 

 

カテゴリ

  



Q



 P

Q

 3

 



Q

''

示してある数値は解説用

  %L.

%LL

%L+

%L*

%LM

 %L/

%L-

 %L,

%LN

 % 1



 % 1 



R&

R&

R



は,ビットマスク型とする。



 

クラステンプレート

 

 

 





 

3



 33 



 P

Q

 3

 



P &

  

 $P



%

. &









&



!

 

!





!



!



&



!

 P





!





!



&



!

 P





!





!



&



  

&



!

  !





!



&



 

&



!

 !





!



&



 

&



!

 

!





!



!



&



 



 

&



!

 

!





!



 

!



&



 33

&

 3

X   &

''

仮想デストラクタ

 



P





&

 



!

P 

!





!



!



&

 



!

P P





!





!



&

 



!

P P





!





!



&

 



P  

&

 



!

P  

!





!



&

 



P 

&

 



!

P 

!





!



&

 



P 

&

 



!

P 

!





!



!



&

 



P 



 

&








 





 



!

P 

!





!





 

!



&

R&

クラス

 

は,

"

ライブラリの

  

の機能をカプセル化している。



のメンバは,入力の構文解



析時に

 

を用いる。

#

が要求する具現化,特に

  

及び

  



は,処理系の現地文字集合に見合う文字分類



機能を実装する。

 

 

のメンバ

 

 4

(

  



 

 

  $

  

  $

 (

 

  $

 (

4$

!

 

返却値  





又は











 

  $

 4

(

 

  $

 (

 

  $



 

返却値  



 









 

  $

  4

(

 

  $

 (

 

  $



 

返却値  



 











  

    

 

 

  $

    $

 (

 

  $



 

返却値  



 

又は



 





  

     



 

 

  $

     $

 (

 

  $



 

返却値  





又は







  

  



 

 

  $

  

  $

 (

 

  $

 (

  $



 

返却値  





又は











 

    

(

 



 

 

  $

   

  $

 (

 

  $(

 

(

  $



 

返却値  





 

又は







 



 

 

の仮想関数

 

  4

(

  



 

 

  $

   

  $

 (

 

  $

 (

4$

!

 

効果  

文字 又は 文字の列を分類する。実引数の文字について,型

 

33

の値



が何であるかを調べる。





番目の形式では,

%

0



を満たす各

!

について,型

 

33

の値



 S VT

格納する。

返却値  

最初の形式は,



0



[%

.

の値を返す。すなわち,文字が指定された性質をもつとき,

 

を返す。





番目の形式は,



を返す。

 

  $

  4

(

 

  $

 (

 

  $



 

効果  

バッファ内の文字で,分類



に合致する文字の位置を求める。



返却値  区間

7,



内で,



!

 

を返す最小のポインタ値

を返す。そのような

が存在しない



場合は



を返す。

 

  $

   4

(

 

  $

 (

 

  $



 


#





 





効果  

バッファ内の文字で,分類



を合致しない文字の位置を求める。

返却値  

区間

7,



内で,



!



を返す最小のポインタ値

を返す。そのような

が存在しない



場合は



を返す。

  

     



 

 

  $

     $

 (

 

  $



 

効果  文字 又は 文字の列を大文字に変換する。



番目の形式では,区間

7,



内の各文字

!

について,対応

する大文字があればその大文字に置き換える。

返却値  最初の形式では,対応する大文字が存在すればその文字を返し,存在しなければ実引数を返す。



番目の形

式は,



を返す。

  

      



 

 

  $

      $

 (

 

  $



 

効果  

文字を小文字に変換する。



番目の形式では,区間

7,



内の各

に対し,文字

!

に対応する小文字が

存在すれば,

!

をその小文字に置き換える。

返却値  最初の形式では,対応する小文字が存在すればその文字を返し,存在しなければ実引数を返す。



番目の形



式は,



を返す。

  

   



 

 

  $

   

  $

 (

 

  $

 (

  $



 

効果  

最も単純かつ妥当な変換方法を適用し,





型の値 又は





型の値の列を,型



の値 又は 型





値の列に変換する。







一意的な変換が要求されるのは,基本文字集合(



)に含まれる文字だけとする。

  

の特性項目

 

及び 有効な

 

33



をもつ任意の名前付き

 

カテゴ リについては,次の式は,

 

となる。









11

[ (

P



番目の形式は,区間

7,



内の各文字(

!

)を変換し ,その結果を

S VT

に格納する。

返却値  最初の形式は,変換後の値を返す。



番目の形式は,



を返す。



 

     

(

 



 

 

  $

    

  $

 (

 

  $

 (

 

(

  $



 

効果  

最も単純かつ妥当な変換方法を適用し,型



の値 又は 型



の値の列を,





型の値 又は





型の



値の列に変換する。





及び





は,基本文字集合(



)に含まれる文字

に対し,次の条件を満足し

なければならない。

PP



 .

%%

  

の特性項目

 

及び 有効な

 

33



をもつ任意の名前付き

 

カテゴ リについ

ては,次の式は,

 

となる(





 

を返す場合を除く。)



 

11

[ (

P  



更に,数字の文字

に対しては,



   V

Z.Z

を評価した結果は,その数字が表す数値となる。



番目の形式は,区間

7,



内の各

に対して文字

!

を変換した結果( 単純な変換が用意されていない場合は

 

)を

S VT

に格納する。

返却値  

最初の形式は,変換後の値を返す。ただし,変換が用意されていない場合,

 

を返す。



番目の形式は,





を返す。







&

&

の文字型実引数は,文字列定数から得られた値を受け取って現地特性のエンコーデ ィングに変換することを意図している。







すなわち,変換された文字は,



が属さないような文字分類には属さない。


(





 





 

クラステンプレート

 



  



Q

 

 





 P

3



  

Q

 3

 

  33



&

  

 P 



!

$P



%

. &

 3

X  P &

''

仮想デストラクタ

 



P





&

 



!

P 

!





!



!



&

 



!

P P





!





!



&

 



!

P P





!





!



&

 



P  

&

 



!

P  

!





!



&

 



P 

&

 



!

P 

!





!



&

 



P 

&

 



!

P 

!





!



!



&

 



P 



 

&

 



!

P 

!





!





 

!



&

R&

R

 

 

の特殊化

  



Q

 





  

3



 33 



 P

Q

 3

 



P &

  

  

!



%

.





%



$P



%

. &









&



!

 

!





!



!



&



!

 P







!





!



&



!

 P





!





!



&



  

&



!

  !





!



&



 

&



!

 !





!



&



 

&



!

 

!





!



!



&



 



 

&



!

 

!





!





 

!



&



 33

&





$P

P$

%

処理系定義

&

 3



!





 &





!

 P

 &

X   &

''

仮想デストラクタ


)





 





 



P  

&

 



!

P  !





!



&

 



P 

&

 



!

P !





!



&

 



P 

&

 



!

P 

!





!



!



&

 



P 



 

&

 



!

P 

!





!





 

!



&

R&

R

特殊化

  

は,



型に対するメンバ関数を



で実装するために提供されている。









メンバ



$

の値は,処理系定義とする。ただし,少なくとも

 

以上でなければならない。

 

  

のデスト ラクタ

. 

効果  

コンストラクタの第



実引数が非ゼロで,第



実引数が真として構築されたオブジェクトの場合,

S

T





を実行する。

 

  

のメンバ

ここでのメンバに関する記述では,



%



$

であるどんな

 !3







型の値



に対しても,

 ST

は,配列の検索を実行するまでもなく処理系定義の値(おそらくは



ごとに

異なる値)をもつと仮定する。



  

4$



,

(

 



,

(

'



,

 

事前条件  



は,

であるか



$

個以上の要素をもつ配列であるかのいずれかでなければならない。



効果  実引数



を基底クラスのコンストラクタに渡す。



 

 4

(

 



 

 

  $

  

  $

 (

 

  $

 (

4$

!

 

効果  



番目の形式では,区間

7,



内の全

に対し,

 S 



 ! T

の値を

 S VT



代入する。

返却値  最初の形式は,

 S 



 T

0



を返す。



番目の形式は,



を返す。

 

  $

 4

(

 

  $

 (

 

  $



 

返却値  区間

7,



内で,次の式が

 

となる最小の



を返す。



 S 



!



T

0



 

  $

  4

(

 

  $

 (

 

  $



 

返却値  区間

7,



内で,次の式が



となる最小の



を返す。

 S 



!



T

0



 

   



 

 

  $

    $

 (

 

  $



 







特殊化が提供されているのは,

?

だけである。

$4&

?

及び

4&

?

には提供されていない。この特殊化は,この規

格で規定してあるから,処理系に細目まで自由度がない。その理由は,この特殊化が

 ?

に対して導出されたインタフェース

に影響を与えるからである。








 





返却値  第



の形式では



 

。第



の形式では



 



 

    



 

 

  $

     $

 (

 

  $



 

返却値  第



の形式では





。第



の形式では







 

  



 

 

  $

  

  $

 (

 

  $

 (

  $



 

返却値  第



の形式では





。第



の形式では











 

   

(

 

E$$E

 

 

  $

   

  $

 (

 

  $

 (

 

E$$E(

  $



 

返却値  第



の形式では





。第



の形式では











 

4$



 

  

返却値  コンストラクタの第



実引数を非ゼロとして構築されている場合,その第



実引数の値。そうでない場合,







 

  

の静的メンバ



 

4$



  

返却値  

Y7Y

現地特性において文字の分類に使われ,



$

個の要素をもつ配列の先頭要素へのポインタ。



 

  

の仮想関数

 

    

 

 

  $

     $

 (

 

  $



 

 

     

 

 

  $

      $

 (

 

  $



 

! 

 

   



 

! 

 

  $

   

  $

 (

 

  $

 (

  $



 

! 

 

    

(

 



 

! 

 

  $

    

  $

 (

 

  $

 (

 

(

  $



 

効果  

これらの関数は,クラステンプレート

 

 

)における同じ名前のメンバと同等とする。



 

クラス

 

 

  



Q

 





 P 



3



  

Q

 3

  

 P 



!

$P



%

. &

 3

X  P &

''

仮想デストラクタ

 



P  

&

 



!

P  !





!



&

 



P 

&

 



!

P !





!



&

 



P 

&

 



!

P 

!





!



!



&

 



P 



 

&

 



!

P 

!




*





 







!





 

!



&

R&

R

 #

クラステンプレート

 

  



Q



 P

Q

 3

 

 

Q







 

R&

R&

 

 





 







 

3



 33 



 P

Q

 3

 



P &

 

 

 P &

 



P &

  

 $P



%

. &

 

 0





!





!

P



!0

P 

 !



 !

P

 !0

P 

&

 

0



 !



 !

P

 !0

P 

&

 

0





 !





 !

P



 !0

P 

!



!

P

!0

P 

&



 



 &



P 



 &



0



 !





 !



$P



&



 P



 &



 33

&

 3

X   &

''

仮想デストラクタ

 

 

P 0





!





!

P



!0

P 

 !



 !

P

 !0

P 

&

 

 

P0





 !





 !

P



 !0

P 

!



!

P

!0

P 

&

 

 

P 

0



 !



 !

P

 !0

P 

&

 



P 



 &

 



PP 





 &

 



P0



 !





 !



$P



&

 



P P



 &

R&

R

クラス

 

 



は,あるコード セットから別のコード セットへの変換に用いる。変



換の例としては,ワイド 文字からマルチバイト文字への変換,

.

3

(."

のようなワイド 文字間での変換など

がある。

実引数



によって,マッピングが行われる一対のコード セットを選択する。



#



)が要求する具現,すなわち

  

  



及び



   

 









は,処理系定義の既存の文字集合の変換を行う。

   











は,変換を全く行わない,退化した変換を実装する。

  

  



は,ナロー文字 及び ワ

イド 文字に対する処理系が本据とする文字集合間の変換を行う。





に関する具現化は,ライブラリ実装者が

定めるエンコーデ ィング間の変換を行う。他のエンコーデ ィングについては,利用者定義の



型に対する特殊








 





化によって変換することができる。



オブジェクトは,特殊化されたメンバ





又は



 

との間で情報を

やりとりするのに使用する状態をもつことができる。

 #

 

のメンバ



 )

(

 

 $

 (

 

 $

 (

 

 $)

 (

 $

 (

 $

 (

 $)

 

 

返却値  



 









 









 





  )

(

 $

 (

 $

 (

 $)

 

 

返却値  













 





 )

(

 

 $

 (

 

 $

 (

 

 $)

 (

 $

 (

 $

 (

 $)

 

 

返却値  













 









 





 

 

  

返却値  



 



 

  !

 

  

返却値  





 



 )

(

 

 $

 (

 

 $

 (

'



 

返却値  



















 

  

返却値  







 #

 

の仮想関数



   )

(

 

 $

 (

 

 $

 (

 

 $)

 (

 $

 (

 $

 (

 $)

 

 



  )

(

 

 $

 (

 

 $

 (

 

 $)

 (

 $

 (

 $

 (

 $)

 

 

事前条件  

%





00

%





は,適切に定義された式であって,その値が

 

でなければな



らない。



は,列の先頭での呼出しでは,初期化されていなければならない。列の先頭以外での呼出しでは,列

内の先行する文字をこの関数で変換したときの結果に等しくなければならない。

効果  変換元として与えられた区間

7,





の文字を変換し ,



から始まる連続した位置に格納する。変



換される文字数は











以下とし ,格納される文字数は









以下とする。変換不可能な文

字が現れた場合は,動作を停止する。この関数は,



 

及び



 

を,正しく変換が行われた最後の要素の

次の要素を指すようにする。この関数が

 

を返す場合,



 

とは同一の型であり,変換された

列が入力列

7,



 

に等しくなる。この場合,



 

は,



に等しく設定され,



の値は変化しな

い。更に,

7,





内の値も変化しない。

備考

実引数



に対する操作は,未規定とする。



参考

この実引数を使っても差し 支えない。例えば ,シフト状態の保持,変換オプションの指定,

シークオフセットのキャッシュの同定などが考えられる。

返却値  表

#

に示す列挙型の値。










 





#



 

の値

意味



変換を完了した。



変換元に含まれる文字の一部を変換した。



7,





中に,変換不可能な文字が存在した。

 



 

とが同一の型であり,入力列と変換後の列とに違うところがない。



 

%%





である場合に結果として



の結果が返されたときは,次のいずれかを意味する。

変換先の列が,変換結果のすべてを納めきれなかった。

更に変換先要素を作り出すには,変換元要素を追加する必要がある。



   )

(

 $

 (

 $

 (

 $)

 

 

効果  現在の





が与えられたとき,現在の列を終了するために追加する必要のある文字を



から始

まる要素に書き込む。







#



)で要求される具現化,すなわち

  

  



及び

   

 









は,文字を格納しない。格納する要素数は,





V



を超えない。



 

ポインタは,常に,最後に格納された要素の次の要素を指す。

返却値  表

#

に示す列挙型の値。



#



 

の値

意味



列を終了した。



列を終了するには,より多くの文字を必要とする。





が不正な値である。

 

与えられた



では,終了処理が不要である。

   

 









は,

 

を返す。



  

 

  

返却値  

 

の列のエンコーデ ィングが状態依存の場合,



を返す。そうでい場合,内部文字



文字を作り出

すのに必要な

 

の文字数を返す。その文字数が定数でなければ

.

を返す。







 

   !

 

  

返却値  





及び



 

が,すべての有効な実引数に対して

 

を返す場合,

 

を返す。

   

 









は,

 

を返す。



  )

(

 

 $

 (

 

 $

 (

'



 

事前条件  

%





は,適切に定義された式で,その値が

 

でなければならない。列の先頭では,



は初期化されていなければならない。そうでなければ ,



は列内の先行する文字を変換した結果に等しく

なければならない。

効果  

実引数



に対する効果は,少なくとも



個の要素をもつバッファを指す



に対し,























を呼び出したのと同等とする。

返却値  



 

V



。ここで,



 

は,区間

7,





の内にあって,区間

7,



 



に含まれる値の列が



文字以下の型



の完全な文字( 列)を表す最大の値とする。

#



)で

要求される具現化,すなわち,

  



 



及び

  







は,



又は





V



の小さいほうを返す。







典型的には,シフト状態を

 

に戻すために必要とされる文字。







 &4



を返す場合,単一の



文字を生成するのに,

(

4?

よりも多くの

(

要素を消費することが

ある。更に,最後の



文字を生成した

(

列の後に,追加の

(

要素が現れることもある。








 







 

 

  

返却値  











L

が,任意の有効な区間

7,





及び



の値





に対して返す値の最大値。具現化

  





33





は,



を返す。

 (

クラステンプレート

 



  



Q

 

 





 







 P

3



 

 



Q

 3

  

 P 



!

$P



%

. &

 3

X  P

&

''

仮想デストラクタ

 

 

P 0





!





!

P



!0

P 

 !



 !

P

 !0

P 

&

 

 

P0





 !





 !

P



 !0

P 

!



!

P

!0

P 

&

 

 

P 

0



 !



 !

P

 !0

P 

&

 



P 



 &

 



PP 





 &

 



P0



 !





 !



$P



&

 

 

P 

0



 !



 !

P

 !0

P 

&

 



P P



 &

R&

R

 

数値カテゴリ

クラス

 



及び

 



は,数値の書式制御 及び 構文解析を行う。いくつかの数



値型については仮想関数が用意されている。処理系は,より小さな型の抽出処理を,より大きな型の抽出処理に委託

することもできる(そうすることが要求されるわけではない。)







 

で規定する

 



及び

 



のメンバ関数に関するすべての仕様は,

#

及び

#



)で



要求された具現化,すなわち,

 

 

 

 



 

7 < <





 

 

 

 



及び

 

7 B  <





についてだけ適用する。これらの具現化は,書式制御仕様



)に関して



0

の実引数を参照する。更に,数値に関する( 理想的にはすべての )区切り記号の好みを

同定するための

   

特性項目, 及び 文字の分類を行うための

 

特性項目について,それに浸透して

いる現地特性を参照する。

抽出子 及び 挿入子のメンバは,

 



及び

 



のメンバ関数を用いて,書式制御 及び 構文解析を行



う(

)( 

及び

)( #

参照)

  

クラステンプレート

 



  



Q

  





< <

%

 P













 P

3



 33 

Q

 3

 



P &

 

< <

P &

  

 P$P



%

. &

P 

P 



P 



P0

P33

0



0



&

P 

P 



P 



P0

P33

0



0



&

P 

P 



P 



P0

P33

0





0



&

P 

P 



P 



P0







6+

を(例えば )

$4&

? 

に正しく構文解析するには,委託する前に,対応するメンバ

4

が少なくとも符号を抽出して

おかなければならない。








 





P33

0





0



&

P 

P 



P 



P0

P33

0





0



&

P 

P 



P 



P0

P33

0



0



&

P 

P 



P 



P0

P33

0



 0



&

P 

P 



P 



P0

P33

0





 0



&

P 

P 



P 



P0

P33

0



!0



&



 33

&

 3

X P &

''

仮想デストラクタ

 

P 

PP 

P 

P0

P33

0



0



&

 

P 

PP 

P 

P0

P33

0



0



&

 

P 

PP 

P 

P0

P33

0





0



&

 

P 

PP 

P 

P0

P33

0





0



&

 

P 

PP 

P 

P0

P33

0





0



&

 

P 

PP 

P 

P0

P33

0



0



&

 

P 

PP 

P 

P0

P33

0



 0



&

 

P 

PP 

P 

P0

P33

0





 0



&

 

P 

PP 

P 

P0

P33

0



!0



&

R&

R

特性項目

 



は,入力ストリームなどの入力列での数値を構文解析するのに用いる。



  

 



のメンバ

 

  

(

 

(

 )

 (

 && )

 (

 )

!

 

 

  

(

 

(

 )

 (

 && )

 (

 )

!

 

 

  

(

 

(

 )

 (

 && )

 (



 )

!

 

 

  

(

 

(

 )

 (

 && )

 (



)

!

 

 

  

(

 

(

 )

 (

 && )

 (



 )

!

 

 

  

(

 

(

 )

 (

 && )

 (

 )

!

 

 

  

(

 

(

 )

 (

 && )

 (

 )

!

 

 

  

(

 

(

 )

 (

 && )

 (

 

 )

!

 

 

  

(

 

(

 )

 (

 && )

 (

! $)

!

 

返却値  















  

 



の仮想関数








 





 

   

(

 

(

 )

 (

 && )

 (

 )

!

 

 

   

(

 

(

 )

 (

 && )

 (



 )

!

 

 

   

(

 

(

 )

 (

 && )

 (



)

!

 

 

   

(

 

(

 )

 (

 && )

 (



 )

!

 

 

   

(

 

(

 )

 (

 && )

 (

 )

!

 

 

   

(

 

(

 )

 (

 && )

 (

 )

!

 

 

   

(

 

(

 )

 (

 && )

 (

 

 )

!

 

 

   

(

 

(

 )

 (

 && )

 (

! $)

!

 

効果  



から文字を読み込み,それらを

(



    





及び





 

    



に従って解釈する。ここで



は,

( 

の結果とする。エラーが発

生した場合,



は変更されない。エラーが発生しなかった場合,



には,結果として得た値が格納される。

この操作は,次に示す



段階に分かれる。



段階



変換指定子を決定する。

段階





から文字を取り出し,段階



で決定した変換指定子に従って,対応する



値を決定する。

段階



結果を格納する。

各段階の詳細を次に示す。

段階



ローカル変数を,次のとおり初期化する。







%

( &





%



0

P33





&



 

%



0

P33 





&



 

%



0

P33





&

汎整数型に変換する場合は,汎整数変換指定子を

##

に従って決定する。表中の各行の順序には意味がある。す



なわち,条件が真となる最初の行を適用して,指定子を決定する。

##

 汎整数変換

状態

等価な



の指定



%%

 

U



%%



U5



%%

.

U

符号付き汎整数型

U

符号なし汎整数型

U

浮動小数点型への変換では,変換指定子は

U

とする。

!

への変換では,変換指定子は

U

とする。



必要があれば ,

#(

に従って変数長変更子を追加する。

#(

 変数長変更子

変数長変更子





















 





 

?


#





 





段階



%%

の場合,段階



は終了する。そうでなければ ,



から型



の文字を



文字取り出し ,ロー

カル変数を次のとおりに初期化する。

P 



%

!

&



%

 S



)

$

V

L



V

T&



 

%%

P   



 





 ( P





%

Z(Z&



 

%

 

%%

P  

 







 ( 

P

 

00

P   









 ( 

(







[%

.

&

ここで,



及び



は,ここで用いられている



の値に対して次のとおりに定義する。







 ST

%

Y.L+*M/-,NO 

6"

7#

89)

VY

&

P 

S$

T

&

P   







 (



)

$

 &

 

が真の場合,文字の位置だけを記憶し ,それ以外の情報は無視する。文字を無視しない場合,段階



で決

定した変換指定子に従って,

が入力フィールド の次の文字として許されるかど うかをチェックする。

が次の文字と

して許される場合は,

を追加する。

文字が無視 又は 追加された場合,

))

によって



を一つ先に進め,処理は段階



の最初に戻る。



段階



 段階



における処理の結果は,次のいずれかとなる。



段階



で蓄えられた



の列は(

 

の規則に従って )



の型の値に変換される。この値が



格納され,



33



に格納される。

段階



で蓄えられた



の列が

 

で入力誤りを起こした場合,



33



に代入さ

れる。

数字のグループ化を検査する。すなわち,無視された区切り記号の位置が,





     









(







と矛盾しないかど うかを検査する。区切り記号の位置に問題があっ

た場合は,



33



に代入する。

どのような場合でも,段階



の処理が



%%



のテストによって終了したときは,

1%

33



実行する。

 

   

(

 

(

 )

 (

 && )

 (

 )

!

 

効果  

( 0

33 

%%

.

の場合,



型の場合と同様に入力が行われる。ただし ,値





に格納される際,その値は次のとおり決定する。

格納される値が

の場合は,



を格納する。

格納される値が



の場合は,

 

を格納する。

それ以外の場合は,

1%

33

を実行し,値は格納しない。

それ以外の場合,合致検査の対象の列を,あたかも,



     





( 

によって得



られる特性項目のメンバ



及び

 

を呼び出したかのようにして決定する。区間

7,



中の

連続した文字(



参照)を取り出し ,対象列中の対応する文字との合致検査を行なう。この場合の合致検査は,

完全に合致するか否かの検査だけを行えばよい。入力反復子





と比較されるのは,文字を取り出すのに必要

な場合だけとする。対象列に完全に合致したときかつそのときに限り,



を対応する値にセットする。



反復子は,常に,最後に合致し た文字の次の位置を指し た状態で終わる。



がセット された場合,





(

をセットする。ただし,次の合致する文字を得ようとして



%%



となった場合は,



(

をセットする。



がセットされなかった場合,



(

をセットする。ただし ,失敗の理由が



%%



である場合は,

(1

(







をセットする。

 

の対象が

YY

及び



の対象が

YY

の場合,入力列

YY

の結果は,



%%

 

及び



%%

(

となる。入力列

Y Y

の結果は,



%%

(

となる。この場合,



Z Z

要素を指して終了する。

 

の対象が

YLY



の対象が

Y.Y

の場合,入力列

YLY

の結果は,



%%

 

及び



%%

(

となる。対象列が空(

YY

)の場合,すべての入力列に対して,その結果



%%

(

となる。

返却値  






(





 





  

クラステンプレート

 



  



Q

 

 





B  <

%

 P













 P 

3



 33 

Q

 3

 



P &

 

B  <

P &

  

 P $P



%

. &

P 

P 



P0



P 

 



&

P 

P 



P0



P 

 



&

P 

P 



P0



P 









&

P 

P 



P0



P 



 



&

P 

P 



P0



P 





 



&

P 

P 



P0



P 





!



&



 33

&

 3

X P  &

''

仮想デストラクタ

 

P 

P P 

P0

P 







&

 

P 

P P 

P0

P 







&

 

P 

P P 

P0

P 







&

 

P 

P P 

P0

P 



 



&

 

P 

P P 

P0

P 





 



&

 

P 

P P 

P0

P 





!



&

R&

R

特性項目

 



は,出力ストリームなどの文字の列に対する,数値の書式付き出力に用いる。



   

 



のメンバ

 

  

(

 )

(

  

(

 

!

 

 

  

(

 )

(

  

(

 

!

 

 

  

(

 )

(

  

(



 

!

 

 

  

(

 )

(

  

(

 

!

 

 

  

(

 )

(

  

(

 

 

!

 

 

  

(

 )

(

  

(

 

! $

!

 

返却値  





 









   

 



の仮想関数

! 

 

   (

 )(

  

(

 

!

 

! 

 

   (

 )(

  

(

 

!

 


)





 





! 

 

   (

 )(

  

(



 

 

! 

 

   (

 )(

  

(

 

!

 

! 

 

   (

 )(

  

(

 

 

!

 

! 

 

   (

 )(

  

(

 

! $

!

 

効果  書式に従って



を変換した文字列を列

 

に書き込む。ここでは,



を次のとおりに初期化されたローカ



ル変数とする。

 



%

(  &

この操作は,複数の段階に分かれる。



段階





) 

)の変換指定子







を決定する。次に,この変換指定子を用いて,









  &

を実行したときに出力される文字を決定する。この際,現地特性として

Y7Y

現地特性を仮定する。

段階



段階



で得られた各文字

 



に変換する。その際,



    







( 

のメンバによって得られる変換 及び 値を用いる。

段階



詰め物が必要か否かを決定する。

段階



得られた列を

 

に挿入する。

各段階における処理の詳細は,段階



∼段階



に示すとおりとする。



返却値  

 



段階



 最初の処理では,変換指定子を決定する。この決定に用いる表では,次のローカル変数を使用する。





%

(

&





%



0

P33





&



 

%



0

P33 





&





%



0

P33





&



 

%



0

P33 



&





%



0

P33





&

段階



で用いられるすべての表は,順序をもつ。すなわち,条件が真となった最初の行を適用する。

:

それ以外

;



示してある行は,それよりも上の行が適用されなかった場合の省略時動作を表す。

文字型以外の汎整数型からの変換規則を,

#)

に示す。

#)

 汎整数変換

状態

対応等価な



の指定



%%



33 

U



%%



33

00

[  

U



%%



33

U5

符号付き汎整数型

U

符号なし汎整数型

U

浮動小数点型からの変換規則を

#

に示す。

#

 浮動小数点変換

状態

等価な



の指定



%%



33 

U



%%



33 

00

[  

U



%%



33 

U8

[  

U

それ以外

U:

汎整数型 又は 浮動小数点型からの変換では,変数長変更子が

#*

に従って追加される。








 





#*

 変数長変更子

変数長変更子













 

?

それ以外

なし

更に,変換指定子には,

(

に示す( 省略可能な )修正子を前置することができる。



(

 数値変換

状態

等価な



の指定

汎整数型



0

 

)



0





浮動小数点型



0

 

)



0

 



浮動小数点型からの変換では,



0

 

[%

.

又は

  

.

の場合,

(  

が変換



指定子の中に指定される。

!

の変換指定子は,

U

とする。



段階



の終わりに得られる表現は,

 

を実行したときに表示される



の列とする。ここで,



は,



上に示したとおりに決定した変換指定子とする。

段階

最初に,小数点(

(

)を除くすべての文字



    



 (

を用いて





に変換する。

ローカル変数

 

を,次のとおり初期化する。



    

 

%

P   









( 

汎整数型の場合,

 (

 

の返す値によって定められる位置(

 

で規定する方法を用いる。)



 ( 

 

を挿入する。

小数点文字(

(

)は,

 ( 



に置き換える。



段階



ローカル変数

 

を,次のとおり初期化する。





 %



0

P33 







&

詰め物が存在するとき,その位置を

(

に従って決定する。









(

 詰め物

状態

パデ ィング位置

 

%%



33

 

%%



33

 

%%



かつ表現中に符号が存在する場合

符号の後

 

%%



かつ表現が

.

又は

.5

で始まる場合

又は

5

の後

それ以外の場合

(

が非ゼロで,段階



で得られた列中の



の個数が

(

よりも少ない場合,列の長さを



(

とするに十分な文字



を,指定された位置に挿入する。

最後に,

(.

を呼ぶ。



段階



 段階



で得られた



の列が,次の式によって出力される。



! ))

%

 

  

(

 )

 (

  

(

 

!

 







変換指定子

9

は,上位けたに

)

を生成するが,それは詰め物ではない。


*





 





効果  

( 0



33  %

%.

の場合,次の式を実行する。



 

%

P 

 









そうでない場合,次の式を実行した後,



 

に挿入する。



    0



%

P   









 &

P 



%



2

 ( 

3

 ( &

 

数値区切り特性項目

 

クラステンプレート

   

  



Q

 

 





   

3



 33 

Q

 3

 



P &

 

 P 



P &

  

   $P



%

. &

P 

 P 

&

P 

 P 

&



 

&

P 

 

&

P 



&



 33

&

 3

X    &

''

仮想デストラクタ

 

P 

P P 

&

 

P 

P P 

&

 



P 

&

 

P 

P 

&

''



型のため