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

(

''

+.(*(N

アダプタ

PP&

6

PLP&

PPF

PF

33!   &

6

PLPF  6

PF

33! 6  &

PPP&

6

PLPP&

PPPF

PPF

33!   &

6

PLPPF 

 6

PPF

33! 6  &

PPP&

6

PPLP&

PPPF

PF

33!  

 &

6

PPLP

F

 6

PF

33! 6 

 &

PPP

P

&

6

PPLP

P

&

PPP

P

PPF

33!  

 &

6

PPLP

P

F

  

6

PPF

33! 6 

 &

R

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

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

"##

プログラムで,

3 %

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

及び

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

果を

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

(

  

(  

(  

(  

  &

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

(

  

(  

(  

 &

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

個 又は

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

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

実引数が

個の場合,

及び

実引数が

個の場合,

及び

基本

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

E

P

Q

6

P&

E

P&

R&

6L 

6+ 

E

P

Q

6L

PP

&

6+

P

P

&

E

P&

R&

算術演算

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

#(

及び

#)

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

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

/

0

&

/((0

5

 

)

(

)

6

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

)

効果  

は,

)

を返す。

/

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

効果  

は,

%

を返す。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

/

0

&

/(( 0

5

 

)

(

)

6

効果  

は,

%

を返す。

上のテンプレート

及び

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

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

%

及び

%

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

論理演算

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

#

##

及び

#

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

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

/

0

&

/((0

5

 

)

(

)

6

効果  

は,

00

を返す。

/

0

&

/(( 0

5

 

)

(

)

6

効果  

は,

11

を返す。

/

0

&

/(0

5

 

)

6

効果  

は,

[

5

を返す。

#

否定子

否定子

L

及び

+

は,単項 及び

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

返す(

#

参照)

/

80

&

/

8&&(  0

5

&

8)

 

8&&)

6

効果  

は,

[

を返す。

/

80

/80

8)

返却値  

C

/

80

&

/

8&&  (

8&&  (

0

5

&

8)

 

8&&  )

(

8&&  )

6

効果  

は,

[

を返す。

/

80

/80

1

8)

返却値  

C

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

*

(

結合子

結合子

L

及び

+

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

及び 値

を受け取り,

の第

実引数 又は 第

実引数に

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

(

クラステンプレート

L

/

90

&

/

9&&   (

9&&0

5

&

9

9&&  

!

&

9)

(

9&&  )

9&&

 

9&&  )

6

効果  

コンストラクタは,

で,

で初期化する。

返却値  

は,

を返す。

(

L

/

9(

0

/90

9)

(

)

返却値  

LB

B33

  

(

クラステンプレート

+

/

90

1

&

/

9&&  (

9&&0

5

&

9

9&&  

!

&

1

9)

(

9&&  )

9&&

 

9&&  )

6

効果  

コンストラクタは,

で,

で初期化する。

返却値  

は,

を返す。

(

+

/

9(

0

1/90

1

9)

(

)

返却値  

+B

B33

  

P(

  

(  

+

/  &

これは,

より大きい最初の

の要素を見つける。

P(

  

(  

L

/  &

これは,

より小さい最初の

の要素を見つける。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

*

)

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

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

( 単項 又は

項の)関

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

/

:(

;0

&

/:(

;0

5

&

  ; 

 $ :

;

  :

6

効果  

は,

を返す。

/

:(

;0

/ :(

;0

 ;

 $ :

返却値  

/

:(

: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

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

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

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

%$

も提供する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

*

/

<(

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

 <

 &&$ :

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

*

効果  

0533 

は,

5

へのポインタ 及び

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

533

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

/

<(

0

&

/(

<0

5

&

 <

 &&$

<

 

)

6

効果  

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

/

<(

(

:0

&

/(

:(

<0

5

&

 <

 &&$ :

<

 

)

(

:

6

効果  

L

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

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

/

<(

0

/<(0

 <

 &&$

/

<(

(

:0

/<((:0

 <

 &&$ :

効果  

0533 

は,参照の実引数 及び

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

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

メモリ

ヘッダ

一覧

Q

''

+.(M(L

省略時割付け子

&

&

G

%%

G0 

 &

G

[%

G0 

 &

''

+.(M(+

素記憶域反復子

B< 

PP

&

''

+.(M(*

一時バッファ

! P

PP

P

 &

PP

!

 &

''

+.(M(M

特殊アルゴ リズム

<< 

9<

9<

$P

<

<

<<

9<

 &

9< 

$P

9

<

9<

0

 &

9< 

F$ 

$P

P

9

<

F$

0

 &

''

+.(M(/

ポインタ

5

P&

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

*

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&

 &

 &

G

G0 

 &

 &

&

P

P

&

$P

3

3

P

%

. &

$P

 &

$P

P$ 

 &

0

 &

 &

R&

R

割付け子

のメンバ

返却値  

0

返却値  

0

 '

(

/!0&&  

,

参考

33

$

を使用する(

参照)

要件  

は,

であるか,メンバ

から受け取りまだ

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

ばならない。

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

返却値  

P

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

のオブジェクトに対

し境界調整されている。

参考

この記憶域は,

33

$

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

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

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

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

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

*

例外  

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

を送出する。

!

(

'

要件  

は,

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

は,

を返した

の呼出しにおける第

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

効果  

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

参考

33

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

'

'

返却値  

が成功する最大の

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)

%%

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

*#

効果  

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

/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

&

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

*(

#

クラステンプレート

テンプレート

は,

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

タを格納する。そして,

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

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

テンプレート

は,

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

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

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

Q

J

PP

QR&

5

P

Q

3

5

P&

''

+.(M(/(L

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

P5!

%. 

 &

PP

 &

J

PP

J

0

 &

P0

%P

0

 &

J

P0

%P

J

 &

P0

%P

P

5

 &

XP 

 &

''

+.(M(/(+

メンバ

50

 &

5!

 &

5!

 &

5!

 &

5!

%. 

 &

''

+.(M(/(*

型変換

PP

P

 &

J

PPJ 

 &

J

PJ 

 &

R&

R

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

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

所有する。

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

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

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

未定義とする。

参考

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

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

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

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

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

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

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

定義とする。

#

のコンスト ラクタ

 ?$

,

事後条件  

コンストラクタ実行後,

!

は,ポインタ

を保持する。

 )

効果  

を呼び出す。

事後条件  

コンストラクタ実行後,

!

は,

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

/

@0

 /@0)

要件  

J!

は,暗黙の型変換で

5!

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

効果  

を呼び出す。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

*)

事後条件  

コンストラクタ実行後,

!

は,

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

)

, )

要件  

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

効果  

(

  

を呼び出す。

返却値  

!

/

@0

)

, /@0)

要件  

J!

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

5!

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

は,適格でなければなら

ない。

効果  

(

  

を呼び出す。

返却値  

!

.

要件  

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

効果  

を呼び出す。

#

のメンバ

?)

$

要件  

[%

.

返却値  

?$

A0

返却値  

?$

返却値  

!

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

?$

返却値  

事後条件  

実行後,

!

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

!

 ?$

,

効果  

[%

の場合,

を呼び出す。

事後条件  

実行後,

!

は,ポインタ

を保持する。

#

の型変換

 /?0

効果  

が保持する

に対し

を呼び出す。

事後条件  

実行後,

!

は,

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

/

@0

/@0

返却値  

!

を保持する

J

を返す。

/

@0

/@0

効果  

を呼び出す。

返却値  

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

J

を返す。

)

, /?0

効果  

が参照を保持する対象の

に対して

を呼び出す。

返却値  

!

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

*

(

ライブラリ

ヘッダ

に示す。

ヘッダ

の要約

種別

名前  

関数

,

,

,

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

"

ライブラリのヘッダ

(

の内容と同じとする。

関数

及び

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

33

)を用いること

はない。

関数

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

33

を用いることはない。

参照  

6

)

ヘッダ

に示す。

ヘッダ

の要約

種別

名前  

マクロ

AG??

$

関数

,

,

,

,

その内容は,

で規定する

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

"

ライブラリのヘッダ

(

の内容と

同じとする。

参照  

6

)

#

日付 及び 時刻

ヘッダ

#

に示す。

#

ヘッダ

の要約

種別

名前  

マクロ

AG??

$

,

,

構造体

関数

,

,

,

,

,

,

,

,

その内容は,

"

ライブラリのヘッダ

(

の内容と同じとする。

参照  

6

)

及び

6

追補

(

文字列ライブラリ

この箇条では,

:

文字

;

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

では,任意の

"

互換型(

*

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

-I

1

)と呼ぶ。

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

)と呼ぶ。

(

に,

の内容を示す。

(

 文字列ライブラリの要約

箇条

ヘッダ  

文字特性

文字列クラス

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

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

**

文字特性

では,文字特性(

!

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

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

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

及び

を規定する。

及び

)

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

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

:!;

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

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

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

7

を扱うには,

7

及び そ

の文字特性クラス

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

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

及び

として定義され

ている。このとき,

33

7

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

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

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

及び

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

に含まれ,

で規定

される要求を満足する。

文字特性に対する要求

)

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

5

は,文字コンテナ型

7

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

を表す。

及び

は,

7

型の値を表す。

及び

は,

7!

型の値を表す。

は,

7!

型の値を表す。

及び

は,

$

型の値を表す。

及び

は,

533

型の値を表す。

は,

533

型の値を表す。

は,

533

型の値を表す。

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

)

 文字特性

に対する要求

返却値の型

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

計算量

533

で規定する。)

コンパイル時

533

で規定する。)

コンパイル時

533

で規定する。)

コンパイル時

533

で規定する。)

コンパイル時

533

で規定する。)

コンパイル時

533  

( 用いない。)

%

の代入を行う。

定数

533  

返却値  

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

定数

とし ,そうでない場合

とする。

533  

返却値  

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

定数

とし ,そうでない場合

とする。

533   

7,

内のすべての

に対し

533ST 

線形

ST 

である場合,

とする。

そうでない場合,

7,

内の ある

に対し

533ST ST

となり,

7,

内の

すべての

に対し

533ST ST 

なる

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

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

533 

$

返却値  

533ST

  

線形

となる最小の

533   

533

返却値  

7,)

内で,

533!  

線形

!

となる最小の

。そのような

が存在しない場合,

とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

)

 文字特性

に対する要求( 続き)

返却値の型

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

計算量

533   

533

!

返却値  

7,

内のすべての

に対して

線形

533ST 

S

を実行した後の

区間

7,

)

7,

)

が重なっていても,

正確にコピーする。

533   

533

!

事前条件  

7,)

内に存在しない。

線形

返却値  

7,

内のすべての

に対して

533ST 

S

を実行した後の

を返す。

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

は,対応する

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

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

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

ラスとする。型

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

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

9>>

89<

要件  

及び

に対する要件は,

)

で規定する。

<:C

要件  

は,型

77

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

の特殊化

Q

P

&

P

P

&

R

ヘッダ

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

を特殊化した

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

構造体

は,

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

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

は,

及び

)

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

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

で規定する。

構造体

Q

P

Q

P&

P&

P&

P&

P

P&

P0

P0

+ &

P0

P0

+ &

P0

P0

+ &

P!

P!

$P

 &

$P

P!

 &

P!

P!

$P

P0

 &

P!

P!

P!

$P

 &

P!

P!

P!

$P

 &

P!

P

!

$P

P

 &

P

P

P0

 &

P

PP

P0

 &

P

PP

P0

 &

PP

P0

P0

+ &

P

 &

R&

R

ヘッダ

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

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

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

この特殊化では,

及び

が,それぞれ,型

及び

として定義してある。

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

CBF

に対する要件(

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

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

B99

に対する要件(

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

は,ヘッダ

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

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

?

%

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

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

二つの実引数のメンバ

及び

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

%

%%

及び

と同じものとして定義し

てある。

メンバ

は,

8B9

を返却する。

構造体

Q

P

P

Q

P

P&

P

P&

P&

P&

P

P&

P0

P0

+ &

P0

P0

+ &

P0

P0

+ &

P!

P!

$P

 &

$P

P!

 &

P!

P!

$P

P0

 &

P!

P!

P!

$P

 &

P!

P!

P!

$P

 &

P!

P

!

$P

P

 &

P

P

P0

 &

P

PP

P0

 &

P

PP

P0

 &

PP

P0

P0

+ &

P

 &

R&

R

ヘッダ

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

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

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

及び

として定義される型は,

及び

とする。

は,処理系定義とする。

は,

で規定された

CBF

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

ならない。

参考

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

は,

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

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

二つの実引数のメンバ

及び

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

%

%%

及び

と同じものとして定義し

てある。

メンバ

は,

I8B9

を返却する。

文字列クラス

ヘッダ

は,すべての文字様(

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

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

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

ヘッダ

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

及び

も定義する。

ヘッダ

の一覧

Q

''

+L(L

文字特性

P&

P

&

P

P

&

''

+L(*

クラステンプレート

P

%

P

6

%

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

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

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

%

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

クラスを用いる。

633

は,

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

クラステンプレート

は,

で規定する列

!A

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

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

#

)であるから,

は,逆進可能コン

テナの要件も満足する。

いかなる場合にも,

%

とする。

で規定する関数は,

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

長さに関するエラー:

*

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

*#

文字列操作の結果として

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

を送出する。

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

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

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

非メンバ関数の

)

),

)*

)及び

)*

)の実引数

として用いた場合。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

33 

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

メンバ関数の

及び

を呼び出した場合。

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

ST 

及び

を除く。

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

及び

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

関数

ST 

又は

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

参考

これらの規則は,

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

よい。)

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

LYY &

33

%

L( &

+

%

L&

!

%

ZZ&

''

変更されるのは,

L

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

Q

%

P

6

%

P

Q

3

''

P&

33P

P&

6

P&

633$P

$P&

633

P

P&

633

&

633P

P&

633

&

633P

P&

処理系定義の型

&

''

+*(L

参照

処理系定義の型

P&

''

+*(L

参照

33P

P

&

33P

P

PP

&

$P

%

VL&

''

+L(*(L

構築/コピー/代入

P

60

%

6  &

P

P0

 &

P

P0

$P

$P

%

60

%

6  &

P

!

$P

60

%

6  &

P

!

60

%

6  &

P$

P

60

%

6  &

<<

P<

<

<<

60

%

6  &

XP 

&

P0

%

P0

 &

P0

%

!

 &

P0

%

 &

''

+L(*(+

反復子

 &

P

&

 &

P

&

P

 &

PP

&

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

(

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

P0

 &

P0

$P

P0

$P

$P

 &

P0

$P

!

$P

 &

P0

$P

!

 &

P0

$P

$P

 &

 &

$P

 &

<<

<<

<<

 &

P0

$P

%

$P

%

 &

 &

 &

P0

$P

$P

P0

 &

P0

$P

$P

P0

$P

$P

+ &

P0

$P

$P

!

$P

+ &

P0

$P

$P

!

 &

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

)

P0

$P

$P

$P

 &

P0

P0

 &

P0

!

$P

 &

P0

!

 &

P0

$P

 &

<<

P0

<<

<<

+ &

$P

!

$P

$P

%

&

P

0

 &

''

+L(*(-

文字列操作

!

&

''

明示的

!

&

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

$P

P0

&

$P

$P

P0

$P

$P

&

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

!

&

$P

$P

!

&

$P

$P

!

$P

&

R&

R

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

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

6

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

:)

,

:

効果  

クラス

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

に示す。

60 

の効果

要素

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

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

未規定の値

/( (:  0 )

/( (:  0 )

(

'

(

'

,

(

:)

,

:

要件  

%

($ 

例外  

($ 

の場合,

を送出する。

効果  

クラス

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

*

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

を,

($ 

V

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

の形式の場合,

6

の値には,

(

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

*

$

$

60 

の効果

要素

割り付けられた,長さ

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

から

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

以上の値

$

(

'

(

:)

,

:

要件  

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

でなければならない。

参考

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

効果  

クラス

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

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

によっ

て示される長さ

型配列から決定する。

!7

$

7

60 

の効果

要素

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

先頭要素が

で指される配列の最初の

文字がコピーされる。

以上の値

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

*

$

(

:)

,

:

要件  

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

効果  

クラス

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

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

によっ

て示される長さ

33 

型配列から決定する。

60 

の効果

要素

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

頭要素が

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

33 

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

33

以上の値

参考

33 

を使用する。

 '

(

(

:)

,

:

要件  

でなければならない。

参考

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

効果  

クラス

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

に示すとおり,

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

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

$

60 

の効果

要素

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

の値で初期化される。

以上の値

/

==0

 ==

(

==

(

:)

,

:

効果  

<<

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

P

P

$

P

  

P

P

  

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

)に従って,

7,

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

/( (:  0 )

,

/(( :  0)

効果  

!

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

に従って

!

を変更する。

%

60 

の効果

要素

先頭要素が

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

($ 

以上の値

!

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

返却値  

!

/( (:  0 )

,

$

返却値  

!

%

6

とする。

参考

33 

を使用する。

/( (:  0 )

,

返却値  

!

%

6

L

とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

の反復子

返却値  

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

返却値  

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

!

!

返却値  

意味的に

  

と同等な反復子とする。

!

!

返却値  

意味的に

  

と同等な反復子とする。

の容量に関する操作

'

'

返却値  

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

'

返却値  

とする。

'

'

返却値  

文字列の最大長とする。

参考

コンテナに関する要件(

)を参照。

!

' '

(

要件  

%

例外  

の場合,

を送出する。

効果  

!

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

%

の場合,

!

を,長さが

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

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

の場合,

!

の指す文字列を,長さが

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

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

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

!

' '

効果  

$

  

'

返却値  

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

!

! '

,

メンバ関数

は,オブジェクト

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

ジェクト

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

効果  

実行後,

の返す値は,

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

参考

より小さい値を実引数

とした

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

要求となる。

%

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

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

例外  

の場合,

を送出する。

!

効果  

次の関数呼出しと同等。

  

  &

返却値  

%%

.

とする。

の要素へのアクセス

*+ '

*+ '

返却値  

の場合,

 ST

とする。

%%

の場合,

版では

とする。そ

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

 '

 '

要件  

例外  

%

の場合,

を送出する。

返却値  

ST 

とする。

#

の変更操作

#

33)

%

/( (:  0 )

%,

/( (:  0)

返却値  

とする。

/( (:  0 )

%,

$

返却値  

!

)%

 6

とする。

参考

33 

を使用する。

/( (:  0 )

%,

返却値  

!

)%

 6

とする。

#

33

/( (:  0 )

/(0 )

返却値  

とする。

/( (:  0 )

/(0 )

(

'

(

'

要件  

%

($ 

例外  

($ 

の場合,

を送出する。

効果  

追加する文字列の実効長

を,

及び

($ 

V

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

%

V

の場合,

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

!

の指す文字列を次のとお

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

長さは,

)

とする。

先頭から

個の要素は,元の

!

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

残りの

個の要素は,

の指す文字列を

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

は,

"

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

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

返却値  

!

とする。

/( (:  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

  

とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

33

/( (:  0 )

 '

(

/(( :  0)

返却値  

L

 .

とする。

/( (:  0 )

 '

(

/(( :  0)

(

'

1(

'

要件  

L

%

かつ

+

%

($ 

でなければならない。

例外  

L

又は

+

($ 

の場合,

を送出する。

効果  

追加する文字列の実効長

を,

及び

($ 

V

+

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

%

V

の場合

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

!

の指す文字列を次のとお

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

長さは,

)

とする。

先頭から

L

個の要素は,元の

!

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

次の

個の要素は,

の指す文字列を

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

残りの要素は,元の

!

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

L

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

ピーしたもの。

返却値  

!

とする。

/( (:  0 )

 '

(

$

(

'

返却値  

 6

  

とする。

/( (:  0 )

 '

(

$

返却値  

 6

  

とする。

参考

33 

を使用する。

/( (:  0 )

 '

(

'

(

返却値  

 6

  

とする。

(

7

要件  

は,

!

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

効果  

が参照する文字の前に,

のコピーを挿入する。

返却値  

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

!

(

'

(

要件  

は,

!

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

効果  

が参照する文字の前に,

のコピーを

個挿入する。

/

==0

!

(

==

(

==

要件  

は,

!

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

7,

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

効果  

V

  

  

に同等とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

##

33

/( (:  0 )

 '

,

(

'

,

要件  

%

例外  

の場合,

を送出する。

効果  

削除する文字列の実効長

を,

及び

V

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

!

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

長さは,

V

とする。

先頭から

個の要素は,元の

!

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

残りの要素は,元の

!

の指す文字列のうち,

)

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

返却値  

!

とする。

要件  

は,

!

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

効果  

が指す文字を削除する。

返却値  

削除以前に,

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

とする。

(

要件  

及び

は,

!

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

7,

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

効果  

7,

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

返却値  

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

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

合,

とする。

#(

33

/( (:  0 )

 '

(

'

(

/( (:  0 )

返却値  

とする。

/( (:  0 )

 '

(

'

(

/( (:  0 )

(

'

1(

'

1

要件  

L

%

かつ

+

%

($ 

でなければならない。

例外  

L

又は

+

($ 

の場合,

を送出する。

効果  

削除する文字列の実効長

を,

L

及び

V

L

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

実効長

を,

+

及び

($ 

V

+

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

例外  

V

%

V

の場合,

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

!

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

長さは,

V

)

とする。

先頭から

L

個の要素は,元の

!

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

次の

個の要素は,

の指す文字列を

+

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

残りの要素は,元の

!

の指す文字列の

L

)

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

返却値  

!

とする。

/( (:  0 )

 '

(

'

(

$

(

'

1

返却値  

 L 

6

 +

  

とする。

/( (:  0 )

 '

(

'

(

$

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

#

返却値  

L

 6

  

とする。

参考

33 

を使用する。

/( (:  0 )

 '

(

'

(

'

1(

返却値  

 L 

6

+

  

とする。

)

(

1(

)

要件  

L

及び

+

は,

!

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

7L,+

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

効果  

!

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

長さは,

V

+

V

)

($ 

とする。

先頭から

V

L

個の要素は,元の

!

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

続く

($ 

個の要素は,

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

残りの要素は,元の

!

の指す文字列のうち

+

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

返却値  

!

とする。

参考

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

($ 

V

+

V

となる。

)

(

1(

$

(

'

返却値  

L +

   

とする。

参考

文字列の長さは,

V

+

V

となる。

)

(

1(

$

返却値  

L +

  

とする。

参考

文字列の長さは,

33 

V

+

V

となる。

33 

を使用する。

)

(

1(

'

(

返却値  

L +

   

とする。

参考

文字列の長さは,

V

+

V

となる。

/

==0

)

(

1(

==

D(

==

D1

返却値  

L +

L +  

とする。

参考

文字列の長さは,

+

V

L

V

+

V

となる。

#)

33

'

 $

(

'

(

'

,

要件  

%

でなければならない。

例外  

の場合,

を送出する。

効果  

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

を,

及び

V

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

の指す文字列

は,少なくとも

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

の指す文字列を,長さが

で,そ

の内容が,

!

の指す文字列のうち

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

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

返却値  

とする。

#

33

!

 /(  ( :  0)

効果  

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

要件  

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

!

の内容は,実行前に

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

の内容は,

!

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

計算量  

定数時間。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

(

(

の文字列操作

$

返却値  

長さが

)

L

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

個の要素は,

!

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

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

要件  

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

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

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

$

返却値  

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

個の要素が

!

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

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

$ %%.

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

要件  

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

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

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

返却値  

文字列の構築に使われる

6

のオブジェクトとする。

(

33

'

/(( :  0)

(

'

,

効果  

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

を見つける。

%

かつ

)

($ 

%

となる。

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

/

について,

)/

%%

(

/

となる。

返却値  

上記の

が見つかった場合,

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

とする。

参考

33 

を使う。

'

$

(

'

(

'

返却値  

6

とする。

'

$

(

'

,

返却値  

6

とする。

参考

33 

を使う。

'

(

'

,

返却値  

6

とする。

(

33

'

/( (:  0)

(

'

,

効果  

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

を見つける。

%

かつ

)

($ 

%

となる。

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

/

について,

)/

%%

(

/

となる。

返却値  

上記の

が見つかった場合,

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

とする。

参考

33 

を使う。

'

$

(

'

(

'

返却値  

 6

  

とする。

'

$

(

'

,

返却値  

 6

  

とする。

参考

33 

を使う。

'

(

'

,

返却値  

 6

L

  

とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

)

(

33

'

/(( :  0)

(

'

,

効果  

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

を見つける。

%

かつ

となる。

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

/

について,

%%

(

/

となる。

返却値  

上記の

が見つかった場合,

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

とする。

参考

33 

を使う。

'

$

(

'

(

'

返却値  

6

  

とする。

'

$

(

'

,

返却値  

6

 

とする。

参考

33 

を使う。

'

(

'

,

返却値  

6

L

  

とする。

(

33

'

/( (:   0)

(

'

,

効果  

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

を見つける。

%

かつ

となる。

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

/

について,

%%

(

/

となる。

返却値  

上記の

が見つかった場合,

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

とする。

参考

33 

を使う。

'

$

(

'

(

'

返却値  

 6

  

とする。

'

$

(

'

,

返却値  

 6

とする。

参考

33 

を使う。

'

(

'

,

返却値  

 6

  

とする。

(#

33

'

/(( :  0)

(

'

,

効果  

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

を見つける。

%

かつ

となる。

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

/

について,

%%

(

/

とならない。

返却値  

上記の

が見つかった場合,

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

とする。

参考

33 

を使う。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

'

$

(

'

(

'

返却値  

6

とする。

'

$

(

'

,

返却値  

6

とする。

参考

33 

を使う。

'

(

'

,

返却値  

6

とする。

((

33

'

/( (:   0)

(

'

,

効果  

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

を見つける。

%

かつ

となる。

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

/

について,

%%

(

/

とならない。

返却値  

上記の

が見つかった場合,

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

とする。

参考

33 

を使う。

'

$

(

'

(

'

返却値  

 6

  

とする。

'

$

(

'

,

返却値  

 6

  

とする。

参考

33 

を使う。

'

(

'

,

返却値  

 6

L

  

とする。

()

33

/( (:  0

 '

,

(

'

,

要件  

%

例外  

の場合,

を送出する。

効果  

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

を,

及び

V

の小さいほうとする。

返却値  

 6

 )

  

とする。

(

33

/(( :  0)

効果  

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

を,

及び

($ 

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

文字列を

33

(  

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

返却値  

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

に示す値とする。

の結果

条件

返却値

($ 

%%

($ 

($ 

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

*

 '

(

'

(

/(( :  0)

返却値  

次の値とする。

P

 6

!

L

(

 '

(

'

(

/(( :  0)

(

'

1(

'

1

返却値  

次の値とする。

P

 6

!

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

)

とする。

/

(

(

:0

/( (:   0

%

/( (:  0)

(

$

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

返却値  

)

 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

とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

/

(

(

: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

とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

)

/

(

(

: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

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

が真のとき,

を呼び出して

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

の指す文字列に追

加する。その際,

(L 

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

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

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

は,

(

33 

を呼び出す。)

次の入力文字

について,

%%

となった(この場合,

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

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

)

参照)

(

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

は,

(

33 

を呼ぶ。)

)

参照)

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

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

のオブジェクト

は,解体される。

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

(

33 

が呼ばれる。これが

33

)

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

返却値  

とする。

/

(

(

:0

/( 0 )

 / (  0)

(

/(( :  0)

返却値  

  

(

Z

4

Z  

とする。

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

#

(

)

及び

*

は,それぞれヘッダ

及び

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

#

ヘッダ

の一覧

種別

名前  

関数

(

ヘッダ

の一覧

種別

名前

マクロ

I8B9

関数

)

ヘッダ

の一覧

種別

名前

マクロ

AG??

$

関数

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

ヘッダ

の一覧

種別

名前

マクロ

AG??

I7;6E

@65

I7;6E

@<A

I8B9

$

関数

*

ヘッダ

の一覧

種別

名前

マクロ

@"

7GE

@65

関数

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

"

ライブラリのヘッダ

(

(

(

(

及び

(

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

どのヘッダも,型

を定義してはならない(

参照)

関数呼出し情報

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

!

!

 &

!

!

 &

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

関数呼出し情報

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

!

!

!

+ &

!

!

!

+ &

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

関数呼出し情報

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

!

!

 &

!

!

 &

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

関数呼出し情報

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

!

!

!

+ &

!

!

!

+ &

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

関数呼出し情報

$

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

!

!

$P

 &

!

!

$P

 &

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

関数呼出し情報

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

P!

P!

P

 &

P!

P!

P

 &

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

#

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

関数呼出し情報

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

P!

P!

P!

+ &

P!

P!

P!

+ &

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

関数呼出し情報

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

P!

P!

P

 &

P!

P!

P

 &

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

関数呼出し情報

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

P!

P!

P!

+ &

P!

P!

P!

+ &

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

関数呼出し情報

$

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

P!

P!

P

$P

 &

P!

P!

P

$P

 &

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

参照  

6

)

))

)

及び

)

6

追補

#

及び

(

現地化ライブラリ

では,

"##

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

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

文字のクラス分け

文字列照合順序

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

メッセージ検索

で規定する項目を

#

に示す。

#

 現地化ライブラリの要約

箇条

ヘッダ

現地特性

標準

カテゴ リ

"

ライブラリの現地特性

現地特性

ヘッダ

の一覧

Q

''

++(L(L

現地特性

&

9

90

P

0 &

9

P

 &

''

++(L(*

便利なインタフェース

0

 &

0

 &

0

 &

0

 &

0

 &

0

 &

0

 &

0

 &

0

 &

0

 &

0

 &

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

(

0

 &

0

 &

''

++(+(L

及び

++(L(*

P&

&

&

''

特殊化

P&

P

&

''

特殊化

P&

&

P&

''

++(+(+

及び

++(+(*

数値

<<

P&

B<

P&

&

P&

''

++(+(M

文字列照合順序

&

P&

''

++(+(/

日付 及び 時間

P&

<<

P&

<<

PP&

B<

P&

B<

PP&

''

++(+(-

金額

P&

<<

P&

B<

P&

<

&

<

P

&

''

++(+(,

メッセージ検索

P&

&

P&

R

ヘッダ

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

ている。

クラス

Q

Q

3

''

&

&

&

''

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

%

%

..L. 

%

..+. 

%

..M. 

%

..N. 

%

.L.. 

%

.+.. 

%

1

1

1

1

1

&

''

構築,複製 及び 解体

では,型名

$

は,

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

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

)

 &

0

 &

!

P &

0

!

 &

9

0

9!

 &

0

0

 &

 &

''

非仮想関数

0

%

0

 &

9

0

&

''

に対する操作

P

&

%%

0

&

[%

0

&

6

P

 6

0

P

 6

0

&

''

大域的

オブジェクト

0 &

0

 &

R&

R

現地特性クラス

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

を索引として実現

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

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

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

又は

を用いる。

入出力ストリームの

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

P

0

P

0

#

Q

P

33

 &

Q

P33

%

.&

&

&

PP

P

(  (

(  

ZZ &

( &

''

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

R

&

R

の呼出しでは,型実引数

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

能になる。

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

を送出す

る。

"##

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

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

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

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

参照)

参考

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

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

に示す例外がある。

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

7  60

7  60 

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

を使うことができる。

など の従来からある

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

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

"##

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

を使って,

$

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

.$%

? /

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

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

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

)(

)の

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

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

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

ができる。

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

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

参考

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

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

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

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

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

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

YCBF<5Y

)から構築された。

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

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

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

33 

は,

Y!Y

返す。

のもつ型

33

有効な

の値には,

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

及び

がある。更に,

のメンバ

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

となる。

1

1

1

1

1

1

%%

更に,有効な二つの

値に対して,演算子

1

及び 演算子

0

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

それぞれ

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

の メンバ関数が 型

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

とし て有効な値,又は

で定義されている

?7

JC8

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

の値は,現地

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

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

#

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

#

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

カテゴ リ

含まれる特性項目

 

は,どんな現地特性

及び 特性項目

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

り立てば

となる。

が,構築されたものか,

33 

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

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

33

の実引数をもつ

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

を行う。

処理系は,

#

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

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

*

#

 必要な具現化

カテゴ リ

含まれる特性項目

 

 <

 <

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

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

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

333333

&

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

9

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

( 明示

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

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

コンストラクタの実引数

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

%%

.

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

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

33

!

を実行する。ただし ,

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

%%

L

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

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

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

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

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

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

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

と定義される。

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

: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

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

)

(

$

(

効果  

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

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

と同じ機能をもつ。

例外  

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

を送出する。

参考

構築される現地特性は,

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

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

/

>0

)

(

>$

効果  

実引数から,型

9

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

実引数を残りの特

性項目として取り込む。

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

のコピーになる。

参考

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

)

(

)

(

効果  

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

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

を実装

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

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

参考

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

.

効果  

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

のメンバ

/

>0

)

効果  

!

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

9

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

目は,

の特性項目を引き継ぐ。

返却値  

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

例外  

9

が偽のとき,

を送出する。

参考

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

/0

返却値  

!

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

Y!Y

を返す。

!

が名前をもつ場合,

 (

  

は,

!

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

の演算子

,,

)

返却値  

次のいずれかの場合,

を返す。

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

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

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

それ以外の場合,

を返す。

-,

)

返却値  

[!

%%

/

(

(

:0

 

/( (:   0)

(

/( (:   0)

1

効果  

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

に従って比較する。

参考

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

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

テンプレート実引数(

#

)の要件を満たす。

返却値  

次に示す式の結果。

P

! (

L(  

L( )

L($  

+(  

+( )

+($  

.&

文字列のベクトル

を,現地特性

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

#

及び

参照)

33(

  

(  

 &

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

#

の静的メンバ

)

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

効果  

以後のコンストラクタ

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

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

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

ここで,

は,その関数に対応する

33

の値とする(

参照)

文字変換

/

0

(

)

返却値  

 (

/

0

(

)

返却値  

 (

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

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

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

うがより高速に扱える。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

標準現地特性カテゴリ

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

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

及び

(それぞれ,メンバ関数

及び

に同じ 。)の中で,

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

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

!

!

!

&

!

PP

!

!

&

!

PP

!

!

&

P

&

!

P

!

!

&

P

&

!

P

!

!

&

&

!

P

!

!

!

&

&

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

!

P

!

!

!

&

R&

クラス

は,

"

ライブラリの

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

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

析時に

を用いる。

#

が要求する具現化,特に

及び

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

機能を実装する。

のメンバ

 4

(

$

$

(

$

(

4$

!

返却値  

又は

$

 4

(

$

(

$

返却値  

$

 4

(

$

(

$

返却値  

$

 $

(

$

返却値  

又は

$

 $

(

$

返却値  

又は

$

$

(

$

(

$

返却値  

又は

(

$

$

(

$(

(

$

返却値  

又は

の仮想関数

 4

(

$

$

(

$

(

4$

!

効果  

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

33

の値

が何であるかを調べる。

番目の形式では,

%

0

を満たす各

!

について,型

33

の値

SVT

格納する。

返却値  

最初の形式は,

0

[%

.

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

を返す。

番目の形式は,

を返す。

$

 4

(

$

(

$

効果  

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

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

返却値  

区間

7,

内で,

を返す最小のポインタ値

を返す。そのような

が存在しない

場合は

を返す。

$

 4

(

$

(

$

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

#

効果  

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

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

返却値  

区間

7,

内で,

を返す最小のポインタ値

を返す。そのような

が存在しない

場合は

を返す。

$

 $

(

$

効果  

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

番目の形式では,区間

7,

内の各文字

!

について,対応

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

返却値  

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

番目の形

式は,

を返す。

$

 $

(

$

効果  

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

番目の形式では,区間

7,

内の各

に対し,文字

!

に対応する小文字が

存在すれば,

!

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

返却値  

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

番目の形

式は,

を返す。

$

$

(

$

(

$

効果  

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

型の値 又は

型の値の列を,型

の値 又は 型

値の列に変換する。

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

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

の特性項目

及び 有効な

33

をもつ任意の名前付き

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

となる。

11

[( 

P  

番目の形式は,区間

7,

内の各文字(

!

)を変換し ,その結果を

SVT

に格納する。

返却値  

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

番目の形式は,

を返す。

(

$

$

(

$

(

(

$

効果  

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

の値 又は 型

の値の列を,

型の値 又は

型の

値の列に変換する。

及び

は,基本文字集合(

)に含まれる文字

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

なければならない。

PP

 .

  

%%

の特性項目

及び 有効な

33

をもつ任意の名前付き

カテゴ リについ

ては,次の式は,

となる(

を返す場合を除く。)

  

11

[( 

P

  

更に,数字の文字

に対しては,

  V

Z.Z

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

番目の形式は,区間

7,

内の各

に対して文字

!

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

)を

SVT

に格納する。

返却値  

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

を返す。

番目の形式は,

を返す。

&

&

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

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

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

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

(

クラステンプレート

Q

P

3

Q

3

33

&

P

$P

%

. &

3

XP &

''

仮想デストラクタ

P

&

!

P

!

!

!

&

!

PP

!

!

&

!

PP

!

!

&

P

&

!

P

!

!

&

P

&

!

P

!

!

&

&

!

P

!

!

!

&

&

!

P

!

!

!

&

R&

R

の特殊化

Q

3

33 

P

Q

3

P&

!

%

%

$P

%

. &

&

!

!

!

!

&

!

P

!

!

&

!

P

!

!

&

&

!

!

!

&

&

!

!

!

&

&

!

!

!

!

&

&

!

!

!

!

&

33

&

$P

P$

%

処理系定義

&

3

!

 &

!

 &

X &

''

仮想デストラクタ

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

)

P

&

!

P!

!

&

P

&

!

P!

!

&

P

&

!

P

!

!

!

&

P

&

!

P

!

!

!

&

R&

R

特殊化

は,

型に対するメンバ関数を

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

メンバ

$

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

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

のデスト ラクタ

.

効果  

コンストラクタの第

実引数が非ゼロで,第

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

S

T

を実行する。

のメンバ

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

%

であるどんな

 !3

型の値

に対しても,

 ST

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

ごとに

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

4$

,

(

,

(

'

,

事前条件  

は,

であるか

$

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

効果  

実引数

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

 4

(

$

$

(

$

(

4$

!

効果  

番目の形式では,区間

7,

内の全

に対し,

 S

 !T

の値を

SVT

代入する。

返却値  

最初の形式は,

 S

 T

0

を返す。

番目の形式は,

を返す。

$

 4

(

$

(

$

返却値  

区間

7,

内で,次の式が

となる最小の

を返す。

 S

!

T

0

$

 4

(

$

(

$

返却値  

区間

7,

内で,次の式が

となる最小の

を返す。

 S

!

T

0

$

 $

(

$

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

?

だけである。

$4&

?

及び

4&

?

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

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

?

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

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

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

返却値  

の形式では

。第

の形式では

$

 $

(

$

返却値  

の形式では

。第

の形式では

$

$

(

$

(

$

返却値  

の形式では

。第

の形式では

(

E$$E

$

$

(

$

(

E$$E(

$

返却値  

の形式では

。第

の形式では

4$

返却値  

コンストラクタの第

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

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

の静的メンバ

4$

返却値  

Y7Y

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

$

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

の仮想関数

$

 $

(

$

$

 $

(

$

!

!

$

$

(

$

(

$

!

(

!

$

$

(

$

(

(

$

効果  

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

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

クラス

Q

P

3

Q

3

P

$P

%

. &

3

XP &

''

仮想デストラクタ

P

&

!

P!

!

&

P

&

!

P!

!

&

P

&

!

P

!

!

!

&

P

&

!

P

!

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

*

!

!

&

R&

R

#

クラステンプレート

Q

P

Q

3

Q

R&

R&

3

33 

P

Q

3

P&

P&

P&

$P

%

. &

0

!

!

!0

!

!

!0

&

0

!

!

!0

&

0

!

!

!0

!

!

!0

&

 &

 &

!

!

$P

&

 &

33

&

3

X &

''

仮想デストラクタ

P0

!

!

!0

!

!

!0

&

P0

!

!

!0

!

!

!0

&

P

0

!

!

!0

&

 &

PP

 &

P0

!

!

$P

&

PP 

 &

R&

R

クラス

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

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

.

3

(."

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

がある。

実引数

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

#

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

 

及び

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

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

 

は,ナロー文字 及び ワ

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

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

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

型に対する特殊

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

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

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

又は

との間で情報を

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

#

のメンバ

 )

(

$

(

$

(

$)

(

$

(

$

(

$)

返却値  

 )

(

$

(

$

(

$)

返却値  

 )

(

$

(

$

(

$)

(

$

(

$

(

$)

返却値  

返却値  

!

返却値  

 )

(

$

(

$

(

'

返却値  

返却値  

#

の仮想関数

 )

(

$

(

$

(

$)

(

$

(

$

(

$)

 )

(

$

(

$

(

$)

(

$

(

$

(

$)

事前条件  

%

00

%

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

でなければな

らない。

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

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

効果  

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

7,

の文字を変換し ,

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

換される文字数は

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

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

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

及び

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

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

を返す場合,

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

列が入力列

7,

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

は,

に等しく設定され,

の値は変化しな

い。更に,

7,

内の値も変化しない。

備考

実引数

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

参考

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

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

返却値  表

#

に示す列挙型の値。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

#

の値

意味

変換を完了した。

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

7,

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

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

%%

である場合に結果として

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

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

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

 )

(

$

(

$

(

$)

効果  

現在の

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

から始

まる要素に書き込む。

#

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

 

及び

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

V

を超えない。

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

返却値  表

#

に示す列挙型の値。

#

の値

意味

列を終了した。

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

が不正な値である。

与えられた

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

は,

を返す。

返却値  

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

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

文字を作り出

すのに必要な

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

.

を返す。

!

返却値  

及び

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

を返す場合,

を返す。

は,

を返す。

 )

(

$

(

$

(

'

事前条件  

%

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

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

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

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

なければならない。

効果  

実引数

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

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

に対し,

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

返却値  

V

。ここで,

は,区間

7,

の内にあって,区間

7,

に含まれる値の列が

文字以下の型

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

#

)で

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

及び

は,

又は

V

の小さいほうを返す。

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

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

&4

を返す場合,単一の

文字を生成するのに,

(

4?

よりも多くの

要素を消費することが

ある。更に,最後の

文字を生成した

列の後に,追加の

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

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

返却値  

が,任意の有効な区間

7,

及び

の値

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

33

は,

を返す。

(

クラステンプレート

Q

P

3

Q

3

P

$P

%

. &

3

XP

 &

''

仮想デストラクタ

P0

!

!

!0

!

!

!0

&

P0

!

!

!0

!

!

!0

&

P

0

!

!

!0

&

 &

PP

 &

P0

!

!

$P

&

P

0

!

!

!0

&

PP 

 &

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

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

おかなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

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

XP &

''

仮想デストラクタ

P

PP

P0 

P33

0

0

&

P

PP

P0 

P33

0

0

&

P

PP

P0 

P33

0

0

&

P

PP

P0 

P33

0

0

&

P

PP

P0 

P33

0

0

&

P

PP

P0 

P33

0

0

&

P

PP

P0 

P33

0

0

&

P

PP

P0 

P33

0

0

&

P

PP

P0 

P33

0

!0

&

R&

R

特性項目

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

のメンバ

(

(

)

(

&&)

(

)

!

(

(

)

(

&&)

(

)

!

(

(

)

(

&&)

(

)

!

(

(

)

(

&&)

(

)

!

(

(

)

(

&&)

(

)

!

(

(

)

(

&&)

(

)

!

(

(

)

(

&&)

(

)

!

(

(

)

(

&&)

(

)

!

(

(

)

(

&&)

(

!$)

!

返却値  

の仮想関数

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

(

(

)

(

&&)

(

)

!

(

(

)

(

&&)

(

)

!

(

(

)

(

&&)

(

)

!

(

(

)

(

&&)

(

)

!

(

(

)

(

&&)

(

)

!

(

(

)

(

&&)

(

)

!

(

(

)

(

&&)

(

)

!

(

(

)

(

&&)

(

!$)

!

効果  

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

及び

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

は,

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

生した場合,

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

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

この操作は,次に示す

段階に分かれる。

段階

変換指定子を決定する。

段階

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

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

値を決定する。

段階

結果を格納する。

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

段階

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

%

( &

%

0

P33

&

%

0

P33

&

%

0

P33

&

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

##

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

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

##

 汎整数変換

状態

等価な

の指定

%%

U

%%

U5

%%

.

U

符号付き汎整数型

U

符号なし汎整数型

U

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

U

とする。

!

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

U

とする。

必要があれば ,

#(

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

#(

 変数長変更子

変数長変更子

?

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

段階

%%

の場合,段階

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

から型

の文字を

文字取り出し ,ロー

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

P

%

!

&

%

)

V

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

の結果は,

%%

及び

%%

(

となる。入力列

YY

の結果は,

%%

(

となる。この場合,

ZZ

要素を指して終了する。

の対象が

YLY

の対象が

Y.Y

の場合,入力列

YLY

の結果は,

%%

及び

%%

(

となる。対象列が空(

YY

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

%%

(

となる。

返却値  

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

(

クラステンプレート

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

XP &

''

仮想デストラクタ

P

PP

P0 

P

&

P

PP

P0 

P

&

P

PP

P0 

P

&

P

PP

P0 

P

&

P

PP

P0 

P

&

P

PP

P0 

P

!

&

R&

R

特性項目

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

のメンバ

(

)

(

(

!

(

)

(

(

!

(

)

(

(

!

(

)

(

(

!

(

)

(

(

!

(

)

(

(

!$

!

返却値  

の仮想関数

!

 (

)(

(

!

!

 (

)(

(

!

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

)

!

 (

)(

(

!

 (

)(

(

!

!

 (

)(

(

!

!

 (

)(

(

!$

!

効果  

書式に従って

を変換した文字列を列

に書き込む。ここでは,

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

ル変数とする。

%

( &

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

段階

)

)の変換指定子

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

  &

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

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:

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

#*

に従って追加される。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

#*

 変数長変更子

変数長変更子

?

それ以外

なし

更に,変換指定子には,

(

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

(

 数値変換

状態

等価な

の指定

汎整数型

0

)

0

浮動小数点型

0

)

0

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

0

[%

.

又は

.

の場合,

が変換

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

!

の変換指定子は,

U

とする。

段階

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

  

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

の列とする。ここで,

は,

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

段階

最初に,小数点(

(

)を除くすべての文字

 ( 

を用いて

に変換する。

ローカル変数

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

%

P

(  

汎整数型の場合,

(

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

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

(

を挿入する。

小数点文字(

(

)は,

(

に置き換える。

段階

ローカル変数

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

%

0

P33

  

&

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

(

に従って決定する。

(

 詰め物

状態

パデ ィング位置

%%

33

%%

33

%%

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

符号の後

%%

かつ表現が

.

又は

.5

で始まる場合

又は

5

の後

それ以外の場合

が非ゼロで,段階

で得られた列中の

の個数が

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

とするに十分な文字

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

最後に,

(. 

を呼ぶ。

段階

段階

で得られた

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

!))

%

(

)

(

(

!

変換指定子

9

は,上位けたに

)

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

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

*

効果  

( 0

33 %

%.

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

%

P

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

に挿入する。

0

%

P

 &

P

%

2

3

( &

数値区切り特性項目

クラステンプレート

Q

3

33

Q

3

P&

P

P&

$P

%

. &

P

&

P

&

&

P

&

P

&

33

&

3

X &

''

仮想デストラクタ

P

PP

&

P

PP

&

&

P

&

''

型のため

P

&

''

型のため

R&

R

は,数値の区切り方を指定する。

#

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

及び

は,古典的な

Y7Y

の数値形式を表す。これらは,

Y7Y

現地特性に含まれる情報,及び それを

の呼出しによってワイド 文字化した情報を保持する。

数値形式の構文を下に示す。ここで,

 !

は,実引数

で指定された基数で使われ る数字の集合を表

す。

"

は,特性項目

によって決定される。

"  

及び

#

は,対応する

のメンバの結果とする。整数の形式は,次のとおりとする。

33%

S!T

 !

!

33%

1 !

 !

S"

T

1 !

 !

33%

Z)Z

1

ZVZ

 !

33%

3!

S"  

 !T

3!

33%

 !

S3!T

浮動小数点数の形式は,次のとおりとする。

50

33%

S!T

 !

#

S3!TT

S

S!T

3!T

1

S!T

#

3!

S

S!T

3!T

33%

ZZ

1

Z8Z

"  

の間に書く数字の個数は,

によって指定される。構文解析を行う際,

 !

》部分に

"  

が含まれない場合,グルーピングに関する制約は,適用されない。

のメンバ

返却値  

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

#

返却値  

返却値  

返却値  

又は

の仮想関数

返却値  

小数点として使われる文字を返す。要求してある具現化では,

Z(Z

又は

?Z(Z

を返す。

返却値  

数字グループの区切り記号として使われる文字を返す。要求してある具現化では,

Z Z

又は

?Z Z

を返す。

返却値  

整数値のベクトルとしての

。ベクトルの各要素

S"T

は,

"

番目のグループに含ま

れる数字の個数を表す。

ここでは,一番右のグループを

番目のグループとする。

($ 

%

"

の場合,

"

目のグループに含まれる数字の個数は,

"

番目のグループに等しい。

".

11

S"T%.

11

S"T%%7;6E

@65 

の場合,

"

番目のグループに含まれる数字の個数に制限はない。要求してある具現化では,グルーピングが行われな

いことを示すために,空のストリングを返す。

返却値  

論理値の

及び

を表す文字列。基底クラスの実装では,これらの名前は

YY

及び

YY

するか,

?YY

及び

?YY

とする。

クラステンプレート

Q

P

3

Q

''

このクラスは,

及び

P

に対して特殊化される。

3

P&

P

P&

P

$P

%

. &

3

XP

 &

''

仮想デストラクタ

P

PP

&

P

PP

&

&

P

&

''

型のため

P

&

''

型のため

R&

R

照合順序カテゴリ

したがって,

 ))J

は,数字

&

個から構成されるグループを表し ,

J

は,おそらく数字

/

個からなる

個のグループを表す。な

ぜなら,

/

は,

J

コードにおける値だからである。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

#

クラステンプレート

Q

3

33

Q

3

P&

P

P&

$P

%

. &

!

!

!

!

&

P

!

!

&

!

!

&

33

&

3

X &

''

仮想デストラクタ

P

!

!

!

!

&

P

P

!

!

&

P

!

!

&

R&

R

クラス

は,文字列に関する順序比較( 照合順序付け ) 及び ハッシングに用いる機能を提供する。

現地特性のメンバ関数テンプレート

は,照合順序特性項目を用いて,文字列に対して操作を行う標準アル

ゴ リズム(

#

) 及び 標準コンテナの述語実引数に現地特性を直接使用することを可能にする。

#

で要求している具現化,すなわち,

及び

では,辞書順(

#

)を適用する。

ここで規定する各関数は,区間

7,

で文字列

!$

を比較する。

のメンバ

$

(

$

(

$

1(

$

1

返却値  

$

(

$

返却値  

$

(

$

返却値  

の仮想関数

$

(

$

(

$

1(

$

1

返却値  

番目の文字列が

番目の文字列よりも大きい場合は

,小さい場合は

,それ 以外の場合は

#

)で要求している具現化,すなわち,

及び

では,辞書順比較(

#

を実装する。

$

(

$

返却値  

の値。これは,他の文字列に対して

を呼んで得られた結果と辞書順で

比較した場合,それらの文字列に対して

を呼んだ場合と同じ結果を得る。

$

(

$

この関数は,一つの文字列を多くの文字列と比較するときに有用である。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

#

返却値  

を用いて比較すると

を返す( すなわち等しい)ようなすべての文字列を考える。これらの

文字列に対して

が返す結果と等しい整数値。

参考

で比較した場合に等しくないと見なされる二つの文字列に対して,

が同じ値

を返す確率は非常に小さく,

L(.'

33  

程度になるのが望ましい。

クラステンプレート

Q

P

3

Q

3

P

P&

P

$P

%

. &

3

XP 

&

''

仮想デストラクタ

P

!

!

!

!

&

P

P

!

!

&

P

!

!

&

R&

R

#

時間カテゴリ

テンプレート

 <<

及び

 B<

は,日付 及び 時間の書式制御 及び 構文解析に関する機能を提供する。ここで規定する

及び

全メンバ関数の仕様は,

#

及び

#

で要求している具現化にだけ適用する。これらのメンバは,書式の詳細を

定めるため,

0

330

,実引数

,及び

特性項目を使用する。

#

クラステンプレート

Q

P

Q

3

Q

R&

R&

<<

%

P

P

3

33 

P

Q

3

P&

<<

P&

P$P

%

. &

Q

PP &

R

P

PP

P

P0

P33

0

!

&

P

PP

P

P0

P33

0

!

&

P

P

P

P

P0

P33

0

!

&

P

P

P

P

P0

P33

0

!

&

P

PP

P

P0

P33

0

!

&

33

&

3

XP &

''

仮想デストラクタ

PP 

&

P

PPP

P

P0 

P33

0

!

&

P

PPP

P

P0 

P33

0

!

&

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

#

P

PP

P

P

P0 

P33

0

!

&

P

PP

P

P

P0 

P33

0

!

&

P

PPP

P

P0 

P33

0

!

&

R&

R

は,文字列を構文解析して時刻 又は 日付の要素を取り出し ,それを

レコード に格納するの

を目的とする。各

メンバは,入力の形式が

33

に対応する書式指定子によって構築されたものと

してその構文解析を行う。構文解析される列が正しい書式に合致するとき,

実引数の対応するメンバは,

列を構築する際に用いられた値にセットされる。そうでない場合,エラーが報告されるか,未規定の値が代入される。

#

のメンバ

返却値  

(

(

)

(

&&)

(

$

返却値  

(

(

)

(

&&)

(

$

返却値  

4

(

(

)

(

&&)

(

$

(

(

)

(

&&)

(

$

返却値  

又は

(

(

)

(

&&)

(

$

返却値  

#

の仮想関数

返却値  

年・月・日からなる日付けの構成要素の順序を表す列挙型の値

ZZ

によって指定される日付けが上記

以外の構成要素( 例えば ,ユリウス暦日,週番号,曜日など )をもつ場合は,

を返す。

(

(

)

(

&&)

(

$

効果  

から始まる文字を読み込み,

のメンバを読み取り,それに続く書式文字(

33

で書

式指定文字

Z5Z

に対応して作り出された部分)を読み捨てる。途中で誤りを検出するか入力の終わりに達するかした

ときは,ただちに終了する。

返却値  

有効な時刻書式の最後であると認識された文字の次を指す反復子。

(

(

)

(

&&)

(

$

すなわち,利用者の入力した日付 及び 時刻を信頼できる形で構文解析するには,利用者の確認が必要であるが,計算機が生成した書

式は,信頼できる形で構文解析可能である。この結果,構文解析器は,標準書式からの利用者の逸脱を積極的に解釈して差し支えない。

この関数は,通常の書式に対してだけ便宜をはかることを意図して設けられている。したがって,有効な現地特性に対して

&

を返してもよい。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

効果  

から始まる文字を読み込み,

のメンバを読み取り,それに続く書式文字(

33

で書

式指定文字

ZZ

に対応して作り出された部分)を読み捨てる。途中で誤りを検出するか入力の終わりに達するかした

ときは,ただちに終了する。

返却値  

有効な日付け書式の最後であると認識された文字の次を指す反復子。

4

(

(

)

(

&&)

(

$

(

(7)

(

&&)

(

$

効果  

から始まる文字を,曜日 又は 月の名前( 略語かもしれない。)を取り出すまで読み込む。略語の後に完全

な名前を構成する文字が続いた場合,完全な名前に合致するか,それが失敗するまで読込みを続ける。この関数は,

の適切なメンバをセットする。

返却値  

有効な名前の最後であると認識した文字の次を指す反復子。

(

(

)

(

&&)

(

$

効果  

から始まる文字を,あいまいでない年識別子を取り出すまで読み込む。数字

文字からなる年番号を受け付

けるかど うか,受け付ける場合にどの世紀であると見なすかは,処理系定義とする。

V

を読み込んだ年に

従ってセットする。

返却値  

有効な年識別子の最後であると認識された文字の次を指す反復子。

#

クラステンプレート

Q

<<

%

P

PP

3

<<

Q

3

P33

&

<<

P&

PP

$P

%

. &

3

XPP

 &

''

仮想デストラクタ

PP 

&

P

PP

P

P

P0 

P33

0

!

&

P

PP

P

P

P0 

P33

0

!

&

P

PP

P

P

P0 

P33

0

!

&

P

PP

P

P

P0 

P33

0

!

&

P

PP

P

P

P0 

P33

0

!

&

R&

R

#

クラステンプレート

Q

B<

%

P

P

3

33

Q

3

P&

B<

P&

P$P

%

. &

''

以下は,他のメンバ関数によって実装される。

P

P

P0

P

!

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

##

!

!

&

P

P

P0

P

!

%

&

33

&

3

XP &

''

仮想デストラクタ

P

PP

P0 

!

&

R&

R

#

のメンバ

(

)

(

(

$

(

$

(

$

(

)

(

(

$

(

(

,

効果  

最初の形式は,

から

までの列を順に見ていき,書式指定である部分を認識する。書式指定を

構成しない文字は,ただちに

に書き出す。書式指定の場合は,それが同定された時点で

を呼び出す。した

がって,書式指定とその他の文字は,それがパターン中に現れた順序で出力中に現れることになる。書式指定は,次

のとおり同定する。最初に,各文字

( . 

を呼び出したと同様に

値に変換する。ここで,

は,

から得られた

への参照とする。各列の最初の文字は

ZUZ

に等しく,その後に省略可能

な変更指定文字

と書式指定文字

が,関数

で定義されたのと同様に続く。

変更指定文字が存

在しない場合,

はゼロとする。認識された有効な書式指定ごとに,

呼び出す。

の形式では,

を呼び出す。

参考

実引数

は,処理系定義の形式の中で,又は 派生クラスによって用いられるかもしれない。空白文

字は,この実引数の省略時の値として妥当なものである。

返却値  

出力された最後の文字の次を指す反復子。

#

の仮想関数

(

)(

(

$

(

(

効果  

実引数

の内容を,出力列

中の文字として出力する。書式制御は,実引数

によってコ

ントロールされる。これは標準ライブラリ関数

の文字列実引数の形式指定と同様に解釈される。

だし ,これらの形式指定で構築される文字列は,処理系定義でなく,

Y7Y

現地特性に従うという点が異なる。

返却値  

出力された最後の文字の次を指す反復子。

#

クラステンプレート

Q

B<

%

P

PP

3

B<Q

3

P&

B<

P&

PP

$P

%

. &

3

XPP

 &

''

仮想デストラクタ

P

PP

P0 

!

&

R&

R

言語では,変更指定文字を規定していないが,ほとんどのベンダーは,変更指定文字を規定している。

&%

実引数の実装は,処理系定義であるが,

%

の規定に従う。

これらの定義を行うにあたって,処理系は,他の標準( 例えば,

%

)を参照することが推奨されている。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#(

(

通貨カテゴリ

このカテゴ リのテンプレートは,通貨書式を扱う。テンプレート仮引数は,使用する現地通

貨書式 又は 国際通貨書式を指定する。

(

で規定する

及び

のメンバ関数仕様は,

#

及び

#

)で要求してい

る具現化にだけ適用する。これらのメンバは,

の規定と同様に

0

330

,実引数

を使用し ,さらに

及び

特性項目も使用して,書式の詳細を定める。

(

クラステンプレート

Q

<<

%

P

P

3

33

Q

3

P&

<<

P&

P

P&

P$P

%

. &

P

P

P

P0

P33

0

0

&

P

P

P

P0

P33

0

P0

&

33

&

3

XP &

''

仮想デストラクタ

P

PP 

P0 

P33

0

0

&

P

PP 

P0 

P33

0

P0

&

R&

R

(

のメンバ

(

(

(

)

(

&&)

(

)

 (

(

(

)

(

&&)

(

)

返却値  

(

の仮想関数

(

(

(

)

(

&&)

(

)

(

(

(

)

(

&&)

(

)

効果  

から読み込んだ文字を構文解析して通貨値を組み立てる。この際,

<

特性項目の

参照

によって指定され る書式,

特性項目の参照

( これは

によって返され る現

地特性から得られる。)及び

によって指定される文字の対応付けに従う。有効な列が認識された場合,

は変更されない。それ以外の場合,

1(

に,又は ( それ以上文字が得られない場合は )

1(

1

(

にセットされ,

及び

は変更されない。

(

の返すパ

ターンを使用して,すべての値を構文解析する。結果は,その汎整数値が

に格納されるか,数字の列が

に格納されるかとする。

の場合,先頭に負号を表す文字(

によって構築されるもの。ここで

は,

ZVZ

か,

Z.Z

から

ZOZ

までの文字のいずれかとする。)が付くかもしれない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#)

合衆国における通常の現地特性において,

L ./-(+*

という列に対しては,

L./-+*

構築するか,

YL./-+*Y

を構築するかのいずれかとなる。

がけた区切り記号を許さない場合,そのような区切り記号は読み込まれず,構文解析は,そのような

記号が最初に現れた時点で終了する。それ以外の場合,けた区切り記号は省略可能とする。すなわち,それらが存在

する場合は,書式を構成する要素がすべて読み込まれてから,区切り記号の位置が正しいかど うかをチェックする。

又は

が,書式パターンの末尾以外にあらわれた場合,その位置にある空白

個を読み捨て,それに続く

空白類(

(

によって認識される文字)があれば,それらすべてを読み捨てる。

0

の場合,通貨記号は省略可能であり,書式を終了させるために他の文字が必要な場合にだけ読み捨てられる。

それ以外の場合,通貨記号は必す( 須)とする。

(

が返す文字列

又は

(

が返す文字列

の最初の文字が,書式パター

ン中の

で示される位置で認識された場合,その文字を読み捨て,その文字列の残りの文字があらわれてはじめ

て,通貨書式の終わりとなる。

がオフ,

の値が

Y Y

,通貨記号が

Y?Y

の場合,

YL..? Y

では,

Y?Y

が読み捨てられる。

しかし ,

YVY

の場合,

YVL..?Y

Y?Y

は読み捨てられない。

又は

が空の場合,符号要素は省略可能とする。符号要素が存在しない場合は,空文字列の符号であると認識

される。それ以外の場合,指定された位置の文字は,

又は

の最初の文字と合致しなければならず,結果とし

て得られる符号は合致したほうの符号となる。

の最初の文字と

の最初の文字が等しい場合,又は ど ちらも空

文字列の場合,符号は正となる。

数値要素中の数字は,

に格納されるか,

の値を構築するため文字バッファ

L

に格納される。ここ

で,数字が格納される順序は出現順とし ,負号が存在する場合はそれを先頭に付ける。結果が負になるのは,負号が

存在する場合だけとする。

の値は,次のとおりに構築する。

%

.&

&

)) 

+ST

%

)$

  

LST 

V

T&

+ST

%

.&

YU?Y 

0 &

ここで,

L

に格納された文字数,

+

は文字バッファとし,

及び

の値は次のとおりとする。

ST

%

Y.L+*M/-,NOVY&

S$

 T

&

)

V

 &

返却値  

有効な通貨値を構成すると認識された最後の文字の次の文字を指す反復子。

(

クラステンプレート

Q

B<

%

P

P

3

33

Q

3

P&

B<

P&

P

P&

P$P

%

. &

P

P

P0

P

&

P

P

P0

P

P0

&

33

&

3

XP &

''

仮想デストラクタ

P

PP

P0 

P

&

ここでの意味論は,

0

のそれとは異なる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

P

PP

P0 

P

P0

&

R&

R

(

のメンバ

(

(

)

(

(

(

(

)

(

(

)

返却値  

(

の仮想関数

(

(

)

(

(

(

(

)

(

(

)

効果  

<

の特性項目の参照

によって指定される書式,

の特性項目の参照

(これは

によって返される現地特性から得られる。)及び

によって指定される文字対

応付けに従って,

に文字を書き込む。実実引数

の値は,まず,次のとおりワイド 文字の列

+

に変換する。

(L 

L

)

YU(.LY 

  

又は

+

中の最初の文字が

(ZVZ 

に等しい場合,書式制御に用いるパターンは,

(

の結果とする。それ以外の場合は,

(

の結果を用いる。数字は,

又は

+

中に現れる順序で書き込む。その際,書式によって指定されるけた区切り記号 及び 小数点記号も加える。また,負号

は先頭に書く。

の場合,省略可能な先頭の負号,及び それに続く数字(

によって区別される。)だけを使用

する。それ以降の文字は,

(非数字文字以降に存在する数字も含めて )無視する。最後に,

(. 

を呼び出す。

備考

通貨記号は,

0

が非ゼロの場合,及び その場合に限って生成される。指

定された書式に従って生成された文字の個数が,この関数に入った時点で

が返す値よりも小さ

い場合,必要な文字幅を埋めるため,

のコピーが挿入される。

0

(

と値

について,

%%

が真の場合,詰め物文字が書式中の

又は

が現れ

る場所に挿入される。それ以外の場合,

%%

のとき他の文字の後に,それ以外の

とき他の文字の前に詰め物文字が挿入される。

参考

書式とフラグ 値の組合せによっては,

33

で構文解析できないような出力を生

成することも可能である。

返却値  

最後に構築された文字の次を指す反復子。

(

クラステンプレート

Q

P

Q

3

Q

R&

Q

SMT&

R&

R&

<

%

3

33 

P

Q

3

P&

P

P&

$P

%

. &

&

&

&

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

#*

P

&

P

&

P

&

&

&

&

33

&

%

<&

3

X &

''

仮想デストラクタ

PP

&

PP

&

&

P

PP 

&

P

PP

&

P

PP

&

PP 

&

PP 

&

PP 

&

R&

R

の特性項目は,

及び

で用いられる通貨書式仮引数を定義する。通貨書

式は,

で表現される

要素の列とする。このとき,

(

S

T

が,書式

の第

要素を決定する。

オブジェクト

のメンバ

中で,

及び

の各値は,

回しか現れてはならない。更に,

及び

については,これらのいずれか一つだけが出現する

ことができる。値

が存在する場合,それは先頭にあってはならない。値

が存在する場合,それは先頭 又

は 末尾にあってはならない。

又は

が現れる個所では,書式中に空白類を含むことが許される。ただし ,

が末尾に現れる場合

は,例外とし,空白類を許さない。値

は,その場所に少なくとも

個の空白が必要であることを表す。

が現れる個所では,

が返す文字列が許される。場合によっては,そのような文字列を要求することも

ある。

が現れる場所では,

又は

が返す文字列の先頭にある文字を必要と

する。符号に関する文字列の残りの要素は,他の全書式要素の終わりに必要とする。

が現れる場所では,通貨

値の絶対値を必要とする。

通貨の数値の書式は,十進数とする。

0

33%

 !

S

#

S

3!

TT

1

#

3!

上に示した形式は,

が正の値を返す場合であり,そうでない場合は,次のとおりとする。

0

33%

 !

上の表記中,記号

#

は,

が返す文字を表す。残りの記号は,次のとおりとする。

 !

33%

3!

S

"  

 !

T

3!

33%

 !

S

3!

T

ここで,記号

 !

は,

Z.Z

から

ZOZ

の値域の

に対して

が返す値のいずれかとする。ここで,

は,

0

型の参照とし ,

及び

の定義で示し た方法で得られる。

記号

"  

は,

が返す文字とする。空白文字は

(Z

の値とする。空白類は,

(  

を返す文字

とする。小数点以下の数字が要求される場合,そのけた数は,

が返す値に等しくなければならない。

けた区切り文字の位置は,メンバ

33

と同じ定義をもつ

の返す値によって

決定される。

(

のメンバ

%&

は,

の配列ではなく,

?

の配列として定義されているが,これは純粋に効率のためである。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

(

!

!

効果  

これらの関数

は,対応する仮想関数

を呼び出した結果の値を返す。

(

の仮想関数

返却値  

がゼロより大きい場合に使用される基数分離記号。

返却値  

が数字のグルーピングを指定している場合に使用される,けた区切り記号。

返却値  

33

の結果と同等に定義されるパターン 。

返却値  

通貨記号として使われる文字列。

!

!

返却値  

は,正の金額を表すために用いられる文字列を返す

は,

負の金額を表すために用いられる文字列を返す。

返却値  

十進の基数分離記号以降に存在する数字の個数。

返却値  表

#

)で要求される具現化,具体的には

及び

を行い,

に初期化さ

れた型

のオブジェクトを返す。

(

クラステンプレート

Q

<

%

P

3

<

Q

3

P33

&

P

P&

P

$P

%

. &

3

XP

&

''

仮想デストラクタ

PP

&

PP

&

&

P

PP 

&

合衆国では,

:0:

であり,日本でも

:0:

である。

合衆国では,

:/:

であり,日本でも

:/:

である。

最も一般的には,この値は

 !!&

である(

&

ではない。)

国際的な具現化(テンプレートの第

仮引数が

$

の場合)では,これは常に

-

文字長であり,通常

&

個の文字と

個の空白で構

成される。

通常,空文字列である。

合衆国の現地特性では,

である。日本の現地特性では,

!

である。

&

$

が返す国際的な記号は,通常空白を含む。例えば,合衆国では

I2F

であり,日本では

K@L

である。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

(

P

PP

&

P

PP

&

PP 

&

PP 

&

PP 

&

R&

R

)

メッセージ検索カテゴリ

クラス

は,メッセージカタログからの文字列検索を実装する。

)

クラステンプレート

Q

P

Q

3

&

R&

3

33 

P

Q

3

P&

P

P&

$P

%

. &

P

0

&

P

P0

&

&

33

&

3

X &

''

仮想デストラクタ

P

P

0

&

P

P0

&

P

&

R&

R

33

の値は,メンバ

及び

への実引数として使う。これらの値は,メンバ

を呼び出すことだけによって得られる。

)

のメンバ

/0)

(

)

返却値  

(

(

(

)

返却値  

!

効果  

を呼び出す。

)

の仮想関数

/0)

(

)

返却値  

メッセージを検索するため,

に渡される値。このメッセージカタログは,処理系定義の対応付けを用

いて,文字列

によって同定される。この関数が返す結果は,それが

に渡されるまで使用可能とする。

参考

現地特性の実引数

は,メッセージ検索時における文字集合のコード 変換が必要な場合に使用される。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

(

(

(

(

)

要件  

カタログ

は,

によって得たものであって,まだクローズされていないものでなければならない。

返却値  

処理系定義の対応付けを用いて,

及び

によって同定されるメッセージ。メッセージが

検索できなかったときは,

を返す。

!

要件  

カタログ

は,

によって得られたものであって,まだクローズされていないものでなければならない。

効果  

に関連付けられたリソースを解放する。

備考

リソースに関する制限が存在する場合,それは処理系定義とする。

)

クラステンプレート

Q

P

3

Q

3

P33

&

P

P&

P

$P

%

. &

3

XP

 &

''

仮想デストラクタ

P

P

0

&

P

P0

&

P

&

R&

R

プログラム定義の特性項目

"##

プログラムは,新たな特性項目を定義し ,それを現地特性に追加して組

込みの特性項目と同様に使用することができる。新しい特性項目のインタフェースを定義する場合,

"##

プログラ

ムは,

33

を基底クラスとして,

33

を含むクラスを派生してよい。

参考

現地特性のメンバ関数テンプレートが,その型 及び 記憶域種別を確認する。

(この段落は,意図的に空にする。)

従来の大域的現地特性を使用することは,容易としている。

!!

Q

&

33

YY

  &

''

大域的現地特性をセット

''

それをすべての

ストリームに浸透

(

  &

(

  

&

(

  

&

(

  

&

(

 &

(

 &

@B 

 ( &

R

より柔軟性をもたせることも可能である。

Q

&

(

YY 

 &

''

利用者の好む現地特性

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

(

(

33

  

&

&

&

[%

. &

R

ヨーロッパの現地特性では,

*(M/- ,N

の入力に対して

*M/-(,N

が出力される。

このことは,利用者の設定を無視して,固定書式でファイルにデータを書き込むといった,単純なプログラムにお

いても重要である。

ライブラリインタフェースでの現地特性の使用例を示す。

''

ファイル

#(

(((

#

Q

(((

3

#

 &

33

F

330

%

33  &

R&

0

0

#0

 &

0

0

#

 &

(((

この例は,クラス

の二つの構文の使い方を示している。

最初の例は,

#33F 

の省略時実引数としての使用法を示す。そこでは,省略時実引数とし

て大域的な(たぶん利用者好みの )現地特性が使われている。

番目の例は,演算子

及び

にある。そこでは,現地特性が他のオブジェクト( この場合はスト

リーム)に便乗して,それが必要となるところまで運ばれている。

''

ファイル

#(7

Y#Y

''

を取り込む。

33

#33F

330

Q

&

&

( &

!&

( &

R

330

33

0

#0

Q

&

33

 &

Q

P33

%

&

&

P

P

(  (

P

0 &

%

#(P 

(P

)

(P

)

LO.. &

&

R

&

R

現地特性オブジェクトには,

33

から派生したクラスのインスタンスを構築することで新しい特性項目

を追加することができる。

"##

プログラムが定義しなければならない唯一のメンバは,静的メンバ

とする。これ

は,利用者定義のクラスを新しい特性項目として識別する。

日本語文字の分類。

''

ファイル

@

Q

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

(

&

=7

3

33

Q

3

33

&

''

新しい特性項目として使うのに必要

P

P

&

=7 

QR

3

X=7 

QR

R&

R

''

ファイル

(7

YY

''

上記のファイル

3333

@33=733&

''

静的メンバ

=7

は,上で宣言されている

Q

&

P

&

YY  

''

利用者好みの現地特性

(((

@33=7 &

''

新しい特性項目

(((

P

%

P

(

Z[Z

 &

[P@33=

7

 (

P

  

Y

Z[Y

&

.&

R

新しい特性項目は,組込みの特性項目と同じに使用されている。

既存の特性項目を置き換えるのも簡単である。ここでは,メンバ

を定義していない。なぜなら

特性項目インタフェースを再使用しているからである。

''

ファイル

P(7

@

Q

&

P

&

"A

3

Q

3

Q

YB

B[Y&

R

Q

Y@

A[Y&

R

X"A 

QR

3

"A

!

3

QR

R&

R

!!

Q

&

''

利用者好みの現地特性を作るが,次の点だけが異なる。

YY  

@33"AYY 

 &

( &

Y6

2

Y

&

.&

R

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

(#

ライブラリの現地特性

ヘッダ

の内容を,

(

に示す。

(

ヘッダ

の一覧

種別

名前

マクロ

?7

6??

?7

7B??68

?7

7JC8

?7

@BA86EJ

?7

AG@8E<7

?7

<@8

AG??

構造体

関数

の内容は,標準

"

ライブラリヘッダ

(

に等しい。

参照  

6

)

コンテナ

では,

"##

プログラムの中で情報の集まりを組織するのに用いるライブラリを規定する。

ここで規定する項目を,

(

に示す。

(

コンテナライブラリ

箇条

ヘッダ  

要件

連想コンテナ

#

ビットセット

コンテナに対する要件

コンテナは,他のオブジェクトを格納するオブジェクトとする。コンストラクタ( 構

築子),デストラクタ( 解体子),挿入演算 及び 消去演算を用いて,これらのオブジェクトの割付け 及び 解放を制

御する。

で規定するすべての計算量要件は,コンテナが含むオブジェクトに対する演算の回数だけで記述する。

のコピーコン ストラクタは,線形計算量をもつ。そして,そこに含まれる

のそれぞれをコピーする計算量そのものも線形である。

コンテナに格納されるオブジェクトの型は,型

77

の要件(

参照)に加えて,代入可能な

6

の要件も満足しなければならない。

(

で,

はコンテナを具現するのに使う型とし ,

の値とし ,

であってよい。)の値とする。

(

 代入可能な型

6

の要件

返却値の型

事後条件

%

0

は,

と等価になる。

(#

及び

((

で,

5

は,型

のオブジェクトを含むコンテナクラスを表し ,

及び

は型

5

の値を表し ,

識別子を表し ,

50

の値を表す。

(#!

コンテナ要件

返却値の型

表明,備考,事前条件,事後条件

計算量

533

6

コンパイル時

533

の左辺値

コンパイル時

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

((

(#!

コンテナ要件

( 続き)

返却値の型

表明,備考,事前条件,事後条件

計算量

533

の定値左辺値

コンパイル時

533

を指す反復子型

出力反復子以外の任意の反復子カテゴ リ。

コンパイル時

533

に変換可能。

533

を指す

出力反復子以外の任意の反復子カテゴ リ。

コンパイル時

反復子型

533

符号付き汎整数型

533

533

コンパイル時

差分型と同じ

533$

符号なし汎整数型

$

は,

コンパイル時

すべての非負の値を表せる。

5

&

事後条件

($ 

%%

.

定数

5 &

5 ($ 

%%

.

定数

5 &

%%

線形

5

 &

事後条件

%%

線形

5

%

&

5

&

%

&

と等価。

0 VX5 &

備考

このデストラクタは,

の全要素に

線形

適用される。

すべてのメモリが解放される。

定数

定数

については

定数

定数

については

%%

に変換可能

%%

は等価関係。

($ 

%%

($ 

00

線形

(  

(  

[%

に変換可能

[

%%

と等価。

線形

  

定数

この箇所は,計算量を定数とするのが望ましい。

(#!

コンテナ要件

返却値の型

操作の意味

事前条件,事後条件

計算量

%

50

事後条件

%%

線形

($ 

$

( V( 

定数

(

$

最大可能コンテナの

定数

に変換可能

($ 

%%

.

定数

に変換可能

事前条件

は,

の値に

線形

(  ( 

ついて定義されている。

(  ( 

は,全順序関係。

に変換可能

線形

%

に変換可能

[

線形

%

に変換可能

[

線形

この箇所は,計算量を定数とするのが望ましい。

参考

アルゴ リズム

 ,

及び

は,

#

で定義する。

メンバ関数

は,コンテナの要素数を返す。その意味は,コンストラクタ,挿入 及び 消去の規則で定義する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

()

は,コンテナの先頭要素を参照する反復子を返す。

は,コンテナの末尾の次を指す反復子を返す。

コンテナが空のとき,

%%

とする。

で定義されたすべてのコンテナ型のコピーコンストラクタは,最初の仮引数から割付け子実引数をコピーする。

これらのコンテナ型の他のコンストラクタは,すべてその値型がコンテナの値型と同じ割付け子である

60

を実引数にする(

#

参照)。これらのコンストラクタ 及び すべてのメンバ関数は,この実引数のコピーを,コ

ンテナオブジェクトの生存期間に実行されるすべてのメモリ割付けで使用する。

で定義されるすべてのコンテナ

型に対して,メンバ

は,コンテナを作るのに使用する割付け子オブジェクトのコピーを返す。

コンテナの反復子型が両進反復子 又は ランダ ムアクセス反復子のカテゴ リに属する場合,そのコンテナは,逆進

可能と呼ばれ,

((

の要件も併せて満たす。

((

 逆進可能コンテナの要件

返却値の型

表明,備考

計算量  

533

を指す反復子型

コンパイル時

533

を指す反復子型

コンパイル時

  

定数

定数

については

  

定数

定数

については

特に規定する場合(

及び

参照)を除いて,

で定義するすべてのコンテナ型は,次の追加要

件を満たさなければならない。

単一要素の挿入時に関数

が例外を送出した場合,その関数は何の効果ももたらさない。

関数

又は

が例外を送出した場合,その関数は何の効果ももたらさない。

関数

及び

は,例外を送出しない。

返された反復子の,コピーコンストラクタ 及び 代入演算子は,例外を送出しない。

コンテナの比較子オブジェクト(

参照)

(もし存在すれば )のコピーコンストラクタ 又は 代入演算

子が送出する例外を除いて,関数

は例外を送出しない。

関数

は,スワップされるコンテナの要素を参照する参照,ポインタ 及び 反復子を無効としない。

( 明示的 又は 他の関数による関数定義によって )特に規定しない限り,コンテナのメンバ関数を呼び出すこと 又は

コンテナをライブラリ関数への実引数として渡すことは,そのコンテナの中のオブジェクトへの反復子を無効にした

り,オブジェクトの値の変更をしたりしない。

!A

は,同じ型のオブジェクトの有限集合を組織化して,厳密に線形配置するコンテナの一種

とする。標準ライブラリは,基本となる

種類の列コンテナ,

及び

を提供する。さらに,標準

ライブラリは,基本的な列( 又は ユーザが定義した他の列)から

などの抽象データ型を構成しやすく

するコンテナアダプタを提供する。

及び

は,プログラマに異なった計算量のトレード オフを提供するので,それに応じて使うの

がよい。

は,特に要求がないときに使う。

は,列の中に頻繁に挿入削除する場合に使う。

は,ほ

とんどの挿入 及び 削除が列の先頭 又は 末尾で生じる場合に適している。

()

及び

(

では,

5

が列クラスを表し,

5

の値を表し,

及び

が入力反復子要件を満足する反復子を表

し,

7,

が正当な区間を表し,

533$

の値を表し,

に対する正当な反復子を表し,

に対す

る参照がはずされた正当な反復子を表し,

7L,

+

における正当な区間を表し,

533

の値を表す。

式の計算量は,列に依存する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

(

()

 列の要件(コンテナへの追加要件)

返却値の型

表明,備考,事前条件,事後条件

事後条件  

%%

のコピーを

個もつ列を

5

 &

構築する。

事後条件  

は,

との間の

となる。

5

 &

区間

7

から成る列を構築する。

(  

のコピーを

の前に挿入する。

(   

個のコピーを

の前に挿入する。

(   

事前条件  

及び

は,

への反復子ではない。

7

にある要素のコピーを

の前に挿入する。

によって指されている要素を消去する。

(L + 

区間

SL + 

にある要素を消去する。

  

  

事後条件  

%%

.

列に対する型

及び

は,少なくとも前進反復子カテゴ リでなければならない。

(  

から返された反復子は,

に挿入された

のコピーを指す。

から返された反復子は,消去される前の

の直後の要素を指す。そのような要素が存在しない場合,

が返される。

(L + 

から返された反復子は,要素が消去される前の

+

が指していた要素を指す。そのような要素が存

在しない場合,

が返される。

及び

で定義されるすべての列について,次が成り立つ。

次のコンストラクタがあったとする。

<<

5<<

<<

60

%

6  

このコンストラクタは,

<<

が汎整数型のとき,次と同じ効果をもつ。

5P

533$P  

P

533P

次の形式のメンバ関数があったとする。

<<

''

のような

L

<<

<<

 &

<<

''

  

のような

+<<

<<

 &

<<

''

のような

*

<<

<<

 &

<<

が汎整数型のとき,これらは,それぞれ次と同じ効果をもつ。

P

533$P

  

P

533P

 &

+P

533$P

  

P

533P

 &

*L 

P

533$P

  

P

533P

 &

参考

これは,反復子要件表の要件から直接出て来る。汎整数型は,反復子であり得ない。したがって,

L

+

が汎整数型

の値の場合,式

5L 

は,反復子の区間からの構築とは解釈され得ない。それ

は,反復子要件表の第

コンストラクタではなく第

コンストラクタを意味すると解釈しなければならな

い。

から

533

への変換がない場合,それは,正当な式ではない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

(*

この要件を満足する列の実装の方法の一つに,そのメンバテンプレートをすべての汎整数型に対して特

殊化するという方法がある。面倒の少ない他の実装技法も存在する。

&

(((

(  

(  &

''

反復子の区間からベクトル

''

を構築する。

$L.. 

L &

''

すべての要素が

L

に初期化される

''

L..

要素のベクトルを構築する。

''

実引数は,反復子とは解釈されない。

$($(

(  

(  &

''

反復子の区間を挿入する。

$($(

+. 

. &

''

数値

.

のコピーを

+.

個挿入する。

(

は,特定の列コンテナに対して提供される列演算を示す。処理系は,

:

コンテナ

;

の欄に示すすべてのコンテ

ナ型に対してこれらの演算を提供しければならず,ならし定数時間で実行できるように実装しなければならない。

(

 列演算( 付加的要件)

返却値の型

操作の意味

コンテナ  

!( 

定数

には

!VV( 

定数

には

(

((

(

(( 

(

((

  

(

(VV(

  

ST

!( 

)

定数

には

!( 

)

定数

には

メンバ関数

は,コンテナの要素に対するアクセスを提供する。

は境界検査を行ない,

%

($ 

あるとき

を送出する。

連想コンテナ

連想コンテナは,キーに基づいたデータの高速検索を可能にする。標準ライブラリは,

及び

種類の基本連想コンテナを提供する。

各連想コンテナは,

>

及び 順序関係

7

により区分され る。

7

は,

>

の要素に対する弱全順序

#

)を与える。

及び

は,

>

に任意の型

を関連付ける。型

7

のオブジェクトを,コンテ

ナの比較子オブジェクトと呼ぶ。比較子オブジェクトは,関数へのポインタであるか 又は 適切な関数呼出し演算子

をもつ型のオブジェクトでなければならない。

:

キーの同値性

;

という句は,比較子から生じる同値関係を意味し ,キーに対する

%%

を意味しない。すな

わち,二つのキー

L

及び

+

が同値であるとは,比較子オブジェクト

に対して

%%

00

%%

の場合とする。

連想コンテナが一意キーに対応するのは,各キーに対して高々一つの要素を含む場合とする。そうでない場合,同

値キーに対応する。クラス

及び

は,一意なキーに対応する。クラス

及び

は,同値キー

に対応する。

クラス

及び

の値の型は,キーの型と同じとする。クラス

及び

の値の型は,

と等価とする。

連想コンテナの反復子は,両進反復子カテゴ リとする。

(*

では,

5

を連想コンテナクラス,

5

の値,

5

が一意キーに対応するときの

5

の値,

5

多重キーに対応するときの

5

の値とし ,

及び

が入力反復子要件を満足し ,値型の要素を参照し ,

7

を正当な

区間,

への正当な反復子,

を正当な参照がはずされた

への反復子,

7L

+

における正当な区間,

533

の値,

533

の値,

を型

533

の値とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

)

(*

 連想コンテナの要件(コンテナへの追加要件)

返却値の型

表明,備考,事前条件,事後条件

計算量  

533

>

>

6

コンパイル時

533

7

省略時は

コンパイル時

533

"C

及び

については,

コンパイル時

と同じ 。

及び

については,第

要素( すなわち

>

)に

よる対の順序関係とする。

空コンテナを構築する。

を比較子オブ

定数

5

 &

ジェクトとして使う。

空コンテナを構築する。

を比

定数

5

&

較子オブジェクトとして使う。

5   &

空コンテナを構築し ,その中に区間

7

一般に

5

   &

の要素を挿入する。

を比較子オブジェク

から

トとして使う。

への距離とす

る。)

7,

で整列している

場合には,線形。

上と同じだが,

を比較子オブ

上と同じ

5

 &

ジェクトとして使う。

(

533

を構築する際の対象となった比較子オブ

定数

ジェクトを返す。

(

533

比較子オブジェクトから構築された

定数

のオブジェクトを返す。

のキーと同値な キーをもつコンテナに

対数

要素がない場合に,またその場合に限り,

を挿入する。返された対の

要素

は,挿入が生じたかど うかを示し ,その

対の

要素は,

のキーと同値

なキーをもつ要素を指す。

を挿入し,新たに挿入された要素を指す

対数

反復子を返す。

(  

一意キーをもつコンテナに

のキーと同値

一般に対数であ

なキーをもつ要素がない場合に,またその

るが,

場合に限り,

を挿入する。同値な キーを

直後に挿入され

もつコンテナには常に

を挿入する。

たときは,なら

キーと同値な キーをもつ要素をもつ反復子

し定数とする。

を常に返す。反復子

は,どこから挿入が

探索を始めるべきかを指すヒントとする。

(  

事前条件  

,

の反復子であっては

一般に

ならない。区間

7

の各要素について

 $ 

#

その要素のキーと同値な一意キーをもつ

から

コンテナにその要素のキーと同値なキーを

への距離とする。)

もつ要素がない場合に限り,挿入する。

7

同値なキーをもつコンテナに常にその

で整列し

要素を挿入する。

ているとき線形。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

)

(*

 連想コンテナの要件(コンテナへの追加要件)

( 続き)

返却値の型

表明,備考,事前条件,事後条件

計算量  

$

に等しいキーをもつコンテナ内の全要素

 $ #

を消去する。消去要素の個数を返す。

で指される要素を消去する。

ならし定数

(L + 

区間

7L

+

の全要素を消去する。

 $ 

#

ここで,

L

から

+

への距離

とする。

(  

に線形

事後条件  

$

%%

.

に同値な キーをもつ要素を指す反復子

対数

が定数の場合には

又は

(そのような要素が見つか

らない場合)を返す。

$

に同値な キーをもつ要素の個数を返す。

対数

(

以上のキーをもつ最初の要素を指す反復

対数

が定数の場合には

子を返す。

(

より大きいキーをもつ最初の要素を指す

対数

が定数の場合には

反復子を返す。

(

(

  

対数

が定

(

  

に等価。

数の場合には

メンバの挿入は,コンテナの反復子 及び 参照の正当性に影響を与えない。メンバの消去は,消去される要素の反

復子 及び 参照だけを無効とする。

連想コンテナの反復子は,キーの非減少順序でコンテナを反復することをその基本特性とする。非減少順序は,そ

の連想コンテナの構築に用いた比較

によって定義する。

から

への距離が正であれば ,参照をはずす

ことが可能な任意の二つの反復子

及び

について次が成り立つ。

P! 

%%

一意キーをもつ連想コンテナについては,より強い次の条件が成り立つ。

P! 

[%

コンストラクタに比較子オブジェクトを渡して連想コンテナを構築した場合,そのコンテナは,渡されたオブジェ

クトへのポインタ 又は 参照を,たとえ参照渡しされたときでも,格納してはならない。連想コンテナが,コピーコ

ンストラクタ 又は 代入演算子によってコピーされる場合,コピー先のコンテナは,コピー元のコンテナの比較子オ

ブジェクトが,与えられてそのコピー先コンテナが構築された場合と同様の扱いで,そのコピー元コンテナの比較子

オブジェクトを使う。

ヘッダは,

とする。

ヘッダ

一覧

Q

6

%

&

6

%%

 6

0

 6

0

 &

6

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

)

 6

0

 6

0

 &

6

[%

 6

0

 6

0

 &

6

 6

0

 6

0

 &

6

%

 6

0

 6

0

 &

6

%

 6

0

 6

0

 &

6

 6

0

 6

0

 &

R

ヘッダ

一覧

Q

6

%

&

6

%%

 6

0

 6

0

 &

6

 6

0

 6

0

 &

6

[%

 6

0

 6

0

 &

6

 6

0

 6

0

 &

6

%

 6

0

 6

0

 &

6

%

 6

0

 6

0

 &

6

 6

0

 6

0

 &

R

ヘッダ

一覧

Q

7

%

&

7

%%

70

70

 &

7

70

70

 &

7

[%

70

70

 &

7

70

70

 &

7

%

70

70

 &

7

%

70

70

 &

7

%

7

%

733P

P&

R

ヘッダ

一覧

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

)

Q

7

%

&

7

%%

70

70

 &

7

70

70

 &

7

[%

70

70

 &

7

70

70

 &

7

%

70

70

 &

7

%

70

70

 &

R

ヘッダ

一覧

Q

6

%

&

6

%%

 6

0

 6

0

 &

6

 6

0

 6

0

 &

6

[%

 6

0

 6

0

 &

6

 6

0

 6

0

 &

6

%

 6

0

 6

0

 &

6

%

 6

0

 6

0

 &

6

 6

0

 6

0

 &

6

 6

&

6

%%

 6

0

 6

0

 &

6

 6

0

 6

0

 &

6

[%

 6

0

 6

0

 &

6

 6

0

 6

0

 &

6

%

 6

0

 6

0

 &

6

%

 6

0

 6

0

 &

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

)

6

 6

0

 6

0

 &

R

クラステンプレート

は,両端列と呼ばれる列データ構造として,

)同様にラ

ンダムアクセス反復子を備える。さらに,先頭 及び 末尾への定数時間での挿入 及び 消去を備える。中間での挿入

及び 消去は,線形時間とする。すなわち,両端列は,先頭末尾での要素の追加

1 !

及び 取出し

1

1

に特に最

適化されている。

同様,記憶域管理は,自動的とする。

は,コンテナ,逆進可能コンテナ(

の表)及び 列の全要件を,付加的な列要件(

)を含めて満

たす。

では,

上の演算について,他の表で記述されていない演算 及び 追加意味情報をもつ演算を規定

する。

Q

6

%

Q

3

''

633

&

633

P

P&

処理系定義

&

''

+*(L

参照

処理系定義

P&

''

+*(L

参照

処理系定義

$P&

''

+*(L

参照

処理系定義

P&

''

+*(L

参照

P&

6

P&

633

&

633

P

P&

33P

P

&

33P

P

PP

&

''

+*(+(L(L

構築・コピー・解体

60

%

6  &

$P

0

%

  

60

%

6  &

<<

<<

<<

60

%

6  &

 6

0

 &

X &

 6

0

%

 6

0

 &

<<

<<

<<

 &

$P

0

 &

P

&

''

反復子

 &

P

&

 &

P

&

P

 &

PP

&

P

 &

PP

&

''

+*(+(L(+

容量

$P

&

$P

P$ 

&

$$P

%

  &

&

''

要素アクセス

ST$P

 &

P

ST$P

&

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

)#

$P

 &

P

$P

&

 &

P

&

 &

P

&

''

+*(+(L(*

修飾子

P

0

 &

P

0

 &

0

 &

$P

0

 &

<<

<<

<<

 &

P &

P &

 &

 &

 6

0

 &

 &

R&

6

%%

 6

0

 6

0

 &

6

 6

0

 6

0

 &

6

[%

 6

0

 6

0

 &

6

 6

0

 6

0

 &

6

%

 6

0

 6

0

 &

6

%

 6

0

 6

0

 &

''

特化アルゴ リズム

6

 6

0

 6

0

 &

R

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

:)

,

:

効果  

割付け子を用いて,空の両端列を構築する。

計算量  

定数。

 '

(

)

!

,

 (

:)

,

:

効果  

割付け子を用いて,

個のコピーからなる両端列を構築する。

計算量  

に比例する。

/

==0

 ==

(

==

(

:)

,

:

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

)(

効果  

指定された割付け子を用いて,区間

7

に対応する両端列を構築する。

計算量  

回,コピーコンストラクタを呼び出す。

/

==0

!

 ==

(

==

効果  

  

  &

  

 &

!

 '

(

)

効果  

  

  &

  

 &

容量

!

' '

'(

,

効果  

$

$  

  

$V$  

 &

$

$  

 )$

  &

&

''

何もしない

変更子

(

)

!

(

'

(

)

/

==0

!

(

==

(

==

効果  

両端列

の中間に挿入すると,両端列の要素へのすべての反復子 及び 参照が無効になる。両端列の先頭

又は 末尾に挿入すると,その両端列へのすべての反復子が無効になるが,両端列の要素への参照については無効にな

らない。

参考

のコピーコンストラクタ 又は 代入演算子以外のものから例外が送出された場合,何の効果ももたらさ

ない。

計算量  

最も多いとき,両端列への単一要素の挿入は,挿入点から先頭までの距離と挿入点から末尾までの距離との

最小の距離についての線形時間をとる。両端列の先頭 又は 末尾への単一要素の挿入は,定数時間をとり,

のコピー

コンストラクタへの呼出しを

回引き起こす。

(

効果  

両端列の中間での消去は,両端列の要素へのすべての反復子 及び 参照を無効にする。両端列の端点での消去

は,消去要素への反復子 及び 参照だけを無効にする。

計算量  

デストラクタへの呼出しの回数は,消去要素の個数と同じとする。代入演算子の呼出し回数は,消去される

要素の,前の要素の個数と後の要素の個数との小さいほうと高々等価となる。

例外  

のコピーコンストラクタ 又は 代入演算子によって送出される例外を除き,例外を送出することはない。

この脚注は,

1

によって削除された。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

))

特化アルゴリズム

/

(

:0

!

 /(:0 )

(

/(:0)

効果  

( &

クラステンプレート

は,リストと呼ばれる,列データ構造として,両進反復子を備える。記憶

管理が自動的に処理され,列内のどこであれ定数時間の挿入演算 及び 消去演算を可能とする。

) 及

)とは異なり,リスト要素への高速なランダムアクセスは,備えていないが,多くのアルゴ リズム

は,逐次アクセスしか必要としない。

は,コンテナ 及び 逆進可能コンテナに対する全要件(

の二つの表で与える。) 並びに 列に対する全要

件を満たし ,付加要件(

)のほとんどを満たす。例外として,メンバ関数

ST

及び

が提供されな

では,

に対する演算のうち,これらの表に記述されていない演算 又は 追加意味情報をもつ演

算だけを示す。

Q

6

%

Q

3

''

633

&

633

P

P&

処理系定義

&

''

+*(L

参照

処理系定義

P&

''

+*(L

参照

処理系定義

$P&

''

+*(L

参照

処理系定義

P&

''

+*(L

参照

P&

6

P&

633

&

633

P

P&

33P

P

&

33P

P

PP

&

''

+*(+(+(L

構築・コピー・解体

60

%

6  &

$P

0

%

  

60

%

6  &

<<

<<

<<

60

%

6  &

 6

0

 &

X &

 6

0

%

 6

0

 &

<<

<<

<<

 &

$P

0

 &

P

&

''

反復子

 &

P

&

 &

P

&

P

 &

PP

&

P

 &

PP

&

''

+*(+(+(+

容量

&

メンバ関数は,ランダムアクセス反復子のコンテナにしか提供されない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

)

$P

&

$P

P$ 

&

$$P

%

  &

''

要素アクセス

 &

P

&

 &

P

&

''

+*(+(+(*

修飾子

P

0

 &

P &

P

0

 &

P &

0

 &

$P

0

 &

<<

<<

<<

 &

 &

 &

 6

&

 &

''

+*(+(+(M

リスト演算

 6

0

 &

 6

0

 &

 6

0

 &

0

 &

C

PC

 &

 &

"C

"C

P &

 6

0

 &

7

 6

0

7

 &

 &

7

7

 &

 &

R&

6

%%

 6

0

 6

0

 &

6

 6

0

 6

0

 &

6

[%

 6

0

 6

0

 &

6

 6

0

 6

0

 &

6

%

 6

0

 6

0

 &

6

%

 6

0

 6

0

 &

''

特化アルゴ リズム

6

 6

0

 6

0

 &

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

)*

R

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

:)

,

:

効果  

指定された割付け子を用いて,空のリストを構築する。

計算量  

定数。

 '

(

)

!

,

 (

:)

,

:

効果  

指定された割付け子を用いて,

個のコピーからなるリストを構築する。

計算量  

に比例する。

/

==0

 ==

(

==

(

:)

,

:

効果  

割付け子を用いて,区間

7

に該当するリストを構築する。

計算量  

に比例する。

/

==0

!

 ==

(

==

効果  

  

  &

  

 &

!

 '

(

)

効果  

  

  &

  

 &

容量

!

' '

'(

,

効果  

$

$  

  

$V$  

 &

$

$  

Q

%

 &

$ &

  &

R

&

''

何もしない

変更子

(

)

!

(

'

(

)

/

==0

!

(

==

(

==

!

)

!

4

)

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

参考

反復子 及び 参照の正当性には影響しない。例外が送出されると,何の効果ももたらさない。

計算量  

リストへの単一要素の挿入は,定数時間とし ,

のコピーコンストラクタを丁度

回呼び出す。リストへの

複数要素の挿入は,挿入される要素の個数に線形となり,

のコピーコンストラクタへの呼出しの回数は,挿入され

る要素の個数に正確に等しくなる。

(

!

!

4

!

効果  

消去対象に指定された要素への反復子 及び 参照だけを無効とする。

例外  

なし 。

計算量  

単一要素の消去は,

のデストラクタへの

回の呼出しを備えた定数時間の演算とする。リスト内の区間の

消去は,区間の距離の線形時間とし ,型

のデストラクタの呼出し回数は,正確に区間の距離に等しい。

演算

リストでは,中間での高速の挿入 及び 消去が可能なので,特に専用の演算を提供する。

は,破壊的に要素を一つのリストから別のリストに移す三つの接合演算を提供する。

!

(

/(:0)

要件  

0

[%

効果  

の前に

の内容を挿入し ,

を空にする。リスト

へのすべての反復子 及び 参照を無効にする。

例外  

なし

計算量  

定数時間。

!

(

/(:0)

(

効果  

の前にリスト

で指される要素を挿入し ,その要素を

から取り除く。

%%

又は

%%

))

のとき,結果は変わらない。接合された要素への反復子 及び 参照だけを無効とする。

例外  

なし

要件  

は,

の正当な参照はずし可能な反復子とする。

計算量  

定数時間。

!

(

/(:0)

(

(

効果  

の前に区間

7

にある要素を挿入し ,

からその要素を取り除く。

要件  

7

は,

における正当な区間とする。

がその区間

7

の反復子のとき,結果

は未定義とする。接合された要素への反復子 及び 参照だけを無効とする。

例外  

なし

計算量  

0

%%

のとき定数時間,それ以外のとき線形時間。

!

!

)

!

/

80

!

! 8

効果  

次の条件が成り立つリスト反復子

で参照されるリストのすべての要素を消去する。

!

%%

[%

例外  

!

%%

又は

[%

の評価によって送出される例外に限られる。

参考

安定性:取り除かれない要素の相対順序は,元のリストでの相対順序に等しい。

計算量  

を正確に

回適用する。

!

/

F80

!

 F8

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

効果  

区間

7

の反復子

によって参照される等価要素のあらゆる連続群から最初以外のすべての要素を

削除する。ここで等価要素とは,

( 実引数

のない

については )

!

%%

!VL 

又は( 実引数

をも

については )

!

V

L  

が成り立つ要素をいう。

例外  

!

%%

!VL 

又は

!

V

L  

の評価によって送出される例外に限られる。

計算量  

区間

が空でない場合,正確に

回の

を適用する。空の場合,

の適用はない。

!

 /(:0)

/

#0

!

 /(:0)

(

#

要件  

は,弱全順序

#

を定義しなければならない。リスト 及び 実引数リストは,この順序で整列してい

なければならない。。

効果  

実引数のリストをリストに併合する。

参考

安定性:二つのリストの同値な要素については,元からのリストの要素が実引数リストの要素に先行す

る。併合後

は空となる。

計算量  

高々

)

($ 

V

L

回の比較。比較以外で例外が送出された場合,効果はもたらさない。

!

!

効果  

リストの要素の順序を反転する。

例外  

なし

計算量  

線形時間

!

/

#0

!

 #

要件  

( 関数の場合)又は

(テンプレートの場合)が弱全順序(

#

)を定義していなければなら

ない。

効果  

又は

7

関数オブジェクトに従ってリストを整列する。

参考

安定性:同値な要素の相対順序は保存される。例外が送出された場合,リスト内の要素の順序がど うな

るかは不定とする。

計算量  

として。ほぼ

回の比較。

#

特化アルゴリズム

/

(

:0

!

 /(:0)

(

/(:0)

効果  

( &

コンテナアダプタ

コンテナアダプタは,それぞれ

7

テンプレートを仮引数にとる。各コンストラ

クタは,

7

を参照する実引数をもつ。これらで与えられたコンテナが,各アダプタの

7

メンバに

コピーされる。

クラステンプレート

演算

  

  

及び

を備える任意の

列は,

を具現するのに使うことができる。特に,

)及び

)を使うことができる。

Q

7

%

Q

3

733

P

P&

733$P

$P&

7

P&

3

7

&

3

70

%

7  &

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

Q

( &

R

$P

Q

($ &

R

P0

Q

( &

R

P0

Q

( &

R

P0

Q

( &

R

P0

Q

( &

R

P0

Q

(P &

R

Q

(P &

R

R&

7

%%

70

70

 &

7

70

70

 &

7

[%

70

70

 &

7

70

70

 &

7

%

70

70

 &

7

%

70

70

 &

R

,,

返却値  

(

%%

(

/

返却値  

(

(

クラステンプレート

ランダ ムアクセス反復子をもち,演算

  

  

を備える任意の列は,

のインスタンス化に使うことができる。特に,

及び 両端列(

)を使うことができる。

のインスタンス化には,優先度比較を行うための関数

又は 関数オブジェクトの供給も含む。このライブラリは,弱全順序(

#

)を定義する関数 又は 関数オブジェクト

を仮定する。

Q

7

%

7

%

733

P

P

Q

3

733

P

P&

733$P

$P&

7

P&

3

7

&

7

&

3

P

70

%

7  

70

%

7  &

<<

P<

<

<<

70

%

7  

70

%

7  &

Q

( &

R

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

$P

Q

($ &

R

P0

Q

( &

R

P0

 &

 &

R&

''

等価性演算は,提供されない

R

のコンスト ラクタ

#)

,

# (

#)

,

#

要件  

は,弱全順序(

#

)を定義する。

効果  

インスタンス変数の

で初期化し,インスタンス変数の

で初期化する。

(  

(  

を呼び出す。

/

==0

 == 

(

==

(

#)

,

# (

#)

,

#

要件  

は,弱全順序(

#

)を定義する。

効果  

インスタン ス変数の

で初期化し ,インスタン ス変数の

で初期化する。

(( 

を呼び出す。最後に,

(  

(  

を呼び出す。

のメンバ

!

!)

効果  

(P &

P(

  

(  

 &

!

効果  

P(

  

(  

 &

(P &

クラステンプレート

演算

  

  

を備える任意の列は,

を具

現するのに使うことができる。特に,

),

)及び

)を使うことができる。

Q

7

%

Q

3

733

P

P&

733$P

$P&

7

P&

3

7

&

3

70

%

7  &

Q

( &

R

$P

Q

($ &

R

P0

Q

( &

R

P0

Q

( &

R

P0

Q

(P &

R

Q

(P &

R

R&

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

7

%%

70

70

 &

7

70

70

 &

7

[%

70

70

 &

7

70

70

 &

7

%

70

70

 &

7

%

70

70

 &

R

クラステンプレート

ベクトル

は,ランダムアクセス反復子を備える列とする。さらに,端点

での(ならし )定数時間の挿入演算 及び 消去演算を備える。中間での挿入操作 及び 消去操作は線形時間とする。記

憶域管理は自動的に行われるが,効率改善のためにヒントを与えてもよい。ベクトルの要素は,連続した場所に蓄えら

れる。すなわち,

以外の型とし,

を型

6

のベクトルとした場合,

%$

となるすべての

について,同一性

0ST

%%

0S.T

)

が成り立つ。

は,コンテナ,逆進可能コンテナの要件(

の二つの表で与える。)及び 列の要件をすべて満たす。追

加要件(

)についても,そのほとんどを満たす。例外として,

の演算

及び

ンバ関数が提供されない。

では,それらの表に記述のない,又は 追加意味情報をもつ

の演算だけを記

述する。

Q

6

%

Q

3

''

633

&

633

P

P&

処理系定義

&

''

+*(L

参照

処理系定義

P&

''

+*(L

参照

処理系定義

$P&

''

+*(L

参照

処理系定義

P&'

'

+*(L

参照

P&

6

P&

633

&

633

P

P

33P

P

&

33P

P

PP

&

''

+*(+(M(L

構築・コピー・解体

60

%

6  &

$P

0

%

  

60

%

6  &

<<

<<

<<

60

%

6  &

 6

0

 &

X &

 6

0

%

 6

0

 &

<<

<<

<<

 &

$P

0

 &

P

&

''

反復子

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

 &

P

&

 &

P

&

P

 &

PP

&

P

 &

PP

&

''

+*(+(M(+

容量

$P

&

$P

P$ 

&

$$P

%

  &

$P

&

&

$P

 &

''

要素アクセス

ST$P

 &

P

ST$P

&

P

$P

&

$P

 &

 &

P

&

 &

P

&

''

+*(+(M(*

修飾子

P

0

 &

P &

0

 &

$P

0

 &

<<

<<

<<

 &

 &

 &

 6

&

 &

R&

6

%%

 6

0

 6

0

 &

6

 6

0

 6

0

 &

6

[%

 6

0

 6

0

 &

6

 6

0

 6

0

 &

6

%

 6

0

 6

0

 &

6

%

 6

0

 6

0

 &

''

特化アルゴ リズム

6

 6

0

 6

0

 &

R

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

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

(

!

:)

,

:

! '

(

)

!

,

 (

:)

,

:

/

==0

! ==

(

==

(

:)

,

:

!

!/(:0)

計算量  

及び

が ,前進反復子,両進反復子,又は ランダ ムアクセス反復子の場合,コン ストラクタ

<<

<<

<<

は,

のコピーコン

ストラクタ(

との距離とする。)を

回呼び出すだけで,再割付けを行わない。反復子

が単なる入力反復子に過ぎない場合,

のコピーコンストラクタの

回程度の呼出し 及び

回程度の

再割付けを行う。

/

==0

!

 ==

(

==

効果  

  

  &

  

 &

!

 '

(

)

効果  

  

  &

  

 &

容量

'

返却値  

再割付けを要しないでベクトルが保持できる最大の要素数。

!

! '

のサイズ変更を伝える指令とし,それを利用して,

の記憶域割付けを管理することができる。再割

付けが生じたとき,

を呼び出した後,

の値は,次のとおりとする。

再割付けが生じた場合,

に与えた実引数の値以上となる。

再割付けが生じない場合,

の以前の値と等しい。

その時点での容量が

に与えた実引数より小さい場合に限り,その時点で再割付けが生じる。

計算量  

列のサイズの高々線形時間となる。

$

の呼出し自身は,列のサイズを変更しない。

例外  

のとき,

を送出する。

参考

再割付けは,列の要素へのすべての参照,ポインタ 及び 反復子を無効にする。

の呼出しが

行われても,挿入操作を行ってベクトルの寸法が直近の

の呼出しの実引数に指定した値より大

きくならない限り,例外が送出されることはない。

!

' '

'(

,

効果  

$

$  

  

$V$  

 &

$

$  

 )$

  &

&

''

何もしない

は,適切な例外を送出する

"

を使う。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

)

変更子

(

)

!

(

'

(

)

/

==0

!

(

==

(

==

参考

新しいサイズが古い容量より大きい場合,再割付けを生じる。再割付けが生じない場合,挿入点より前

のすべての反復子 及び 参照は,正当とする。例外が生じた場合,

のコピーコンストラクタ 又は 代入演

算子による例外発生を除き,何の効果ももたらさない。

計算量  

及び

が ,前進反復子,両進反復子 又は ランダ ムアクセス反復子の場合,計算量は,区間

7

内の要素数にベクトルの末尾への距離を加えた値に比例する。

及び

が入力反復子の場合,

計算量は,区間

7

内の要素数にベクトルの末尾への距離を乗じた値に比例する。

(

効果  

消去した位置より後のすべての反復子 及び 参照を無効とする。

計算量  

のデストラクタが,消去される要素の個数と同じ回数だけ呼ばれる。

の代入演算子は,消去される要素

の後に並ぶベクトルの要素の個数と同じ回数だけ呼ばれる。

例外  

のコピーコンストラクタ 又は 代入演算子によって送出される例外以外はない。

特化アルゴリズム

/

(

:0

!

 !/(: 0)

(

!/(:0)

効果  

( &

#

クラス

領域割付けを最適化するために,

%

型の要素に対する

の特殊化が提供さ

れている。

Q

6

6

Q

3

''

P&

処理系定義

&

''

+*(L

参照

処理系定義

P&

''

+*(L

参照

処理系定義

$P&

''

+*(L

参照

処理系定義

P&'

'

+*(L

参照

P&

6

P&

処理系定義

&

処理系定義

P

33P

P

&

33P

P

PP

&

''

ビット参照

Q

&

 &

3

X &

&

0

%

 &

0

%

0

 &

 &

''

ビットを反転する

R&

''

構築・コピー・解体

60

%

6  &

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

$P

0

%

  

60

%

6  &

<<

<<

<<

60

%

6  &

 6

0

 &

X &

 6

0

%

 6

0

 &

<<

<<

<<

 &

$P

0

 &

P

&

''

反復子

 &

P

&

 &

P

&

P

 &

PP

&

P

 &

PP

&

''

容量

$P

&

$P

P$ 

&

$$P

%

 &

$P

&

&

$P

 &

''

要素アクセス

ST$P

 &

P

ST$P

&

P

$P

&

$P

 &

 &

P

&

 &

P

&

''

修飾子

P

0

 &

P &

0

 &

$P

0

 &

<<

<<

<<

 &

 &

 &

 6

0

 &

 &

 &

''

全ビットを反転する

 &

R&

6

%%

 6

0

 6

0

 &

6

 6

0

 6

0

 &

6

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

*

[%

 6

0

 6

0

 &

6

 6

0

 6

0

 &

6

%

 6

0

 6

0

 &

6

%

 6

0

 6

0

 &

''

特化アルゴ リズム

6

 6

0

 6

0

 &

R

は,

の単一ビットの参照の振る舞いを模倣するクラスとする。

連想コンテナ

ヘッダ

及び

は,次のとおりとする。

ヘッダ

一覧

Q

7

%

6

%

&

6

%%

>  7

6

0

>  7

6

0

 &

6

>  7

6

0

>  7

6

0

 &

6

[%

>  7

6

0

>  7

6

0

 &

6

>  7

6

0

>  7

6

0

 &

6

%

>  7

6

0

>  7

6

0

 &

6

%

>  7

6

0

>  7

6

0

 &

6

>  7

6

0

>  7

6

0

 &

7

%

6

%

&

6

%%

>  7

6

0

>  7

6

0

 &

6

>  7

6

0

>  7

6

0

 &

6

[%

>  7

6

0

>  7

6

0

 &

6

>  7

6

0

>  7

6

0

 &

6

%

>  7

6

0

>  7

6

0

 &

6

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

*

%

>  7

6

0

>  7

6

0

 &

6

>

 7

6

0

>  7

6

0

 &

R

ヘッダ

一覧

Q

7

%

6

%

>

&

6

%%

> 7 

6

0

> 7 

6

0

 &

6

> 7 

6

0

> 7 

6

0

 &

6

[%

> 7 

6

0

> 7 

6

0

 &

6

> 7 

6

0

> 7 

6

0

 &

6

%

> 7 

6

0

> 7 

6

0

 &

6

%

> 7 

6

0

> 7 

6

0

 &

6

> 7

6

0

> 7 

6

0

 &

7

%

6

%

>

&

6

%%

> 7

6

0

> 7

6

0

 &

6

> 7

6

0

> 7

6

0

 &

6

[%

> 7

6

0

> 7

6

0

 &

6

> 7

6

0

> 7

6

0

 &

6

%

> 7

6

0

> 7

6

0

 &

6

%

> 7

6

0

> 7

6

0

 &

6

>

7

6

0

> 7

6

0

 &

R

クラステンプレート

は,一意キーを備える( 高々一つのキー値を保持する )連想コンテナとし ,

キーに基づく他の型

の値の高速検索を提供する。クラス

は,両進反復子を備える。

は,コンテナ,逆進可能コンテナ(

)及び 連想コンテナ(

)の要件すべてを満たす。

は,一意

キーのためのほとんどの演算(

)も提供する。すなわち,

が,

)の演算

を備えているが,演

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

*

を備えていない。

>

については,

>

とし,

>

とす

る。

では,これらの

の演算のうち,表のいずれでも記述されていない演算 又は 追加意味情報をもつ演算

だけを示す。

Q

7

%

6

%

Q

3

''

>

P&

P&

P&

7

P&

6

P&

633

&

633

P

P&

処理系定義

&

''

+*(L

参照

処理系定義

P&

''

+*(L

参照

処理系定義

$P&

''

+*(L

参照

処理系定義

P&

''

+*(L

参照

633

&

633

P

P&

33P

P

&

33P

P

PP

&

P

3

P

P

P

Q

&

3

7

&

P7

3

QR

3

P0

P0

Q

( &

R

R&

''

+*(*(L(L

構築・コピー・解体

70

%

7  

60

%

6  &

<<

<<

<<

70

%

7  

60

%

6  &

>  7

6

0

 &

X &

>  7

6

0

%

>  7

 6

0

 &

P

&

''

反復子

 &

P

&

 &

P

&

P

 &

PP

&

P

 &

PP

&

''

容量

&

$P

&

$P

P$ 

&

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

*

''

+*(*(L(+

要素アクセス

0

ST

P0

 &

''

修飾子

P0

 &

P0

 &

<<

<<

<<

 &

 &

$P

P0

 &

 &

>  

7

6

&

 &

''

観察子

P

&

P

&

''

+*(*(L(*

演算

P0

 &

P

P0

&

$P

P0

&

P

P0

 &

P

P

P0

&

P

P0

 &

P

P

P0

&

P

P0

 &

P

P

P

P0

&

R&

6

%%

>  7

6

0

>  7

6

0

 &

6

>  7

6

0

>  7

6

0

 &

6

[%

>  7

6

0

>  7

6

0

 &

6

>  7

6

0

>  7

6

0

 &

6

%

>  7

6

0

>  7

6

0

 &

6

%

>  7

6

0

>  7

6

0

 &

''

特化アルゴ リズム

6

>  

7

6

0

>  7

6

0

 &

R

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

#)

,

# (

:)

,

:

効果  

比較子オブジェクト 及び 割付け子を用いて,空の

を構築する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

*

計算量  

定数。

/

==0

 ==

(

==

(

#)

,

# (

:)

,

:

効果  

比較子オブジェクト 及び 割付け子を用いて空の

を構築し ,区間

7

の要素を挿入する。

計算量  

区間

7

がすでに

の比較の下で整列している場合,

に比例する。そうでない場合,

に比例する。ここで,

とする。

要素アクセス

)

*+

4)

返却値  

!

    (  (

演算

4)

4)

4)

4)

4)

4)

/(

0

4)

/(

0

4)

メンバ関数

,

,

及び

は,それぞれ,定値の版 及び 非定値の版をもつ。

二つの関数の振る舞いは,定値の版は

を返し ,非定値の版は

を返すこと(

)を除

いて,同一とする。

特化アルゴリズム

/

G(

(

#(

:0

!

 /G((#( :  0)

(

/G((#(: 0)

効果  

( &

クラステンプレート

は,同値キー に対応する( 同じキー値の多重コピーを保持し う

る)連想コンテナとし ,キーに基づいた他の型

の値の高速検索を提供する。クラス

は,両進反復子を備

える。

は,コンテナ,逆進可能コンテナ(

)及び 連想コンテナ(

)の要件すべてを満たす。

は,同値キー のための演算(

)のほとんど も提供する。すなわち,

は,

)の演算

を備

えるが,演算

を備えていない。

>

については,

>

とし ,

>

とする。

では,

の演算のうち,表のいずれでも記述されていない演算 又は 追加意味

情報をもつ演算だけを示す。

Q

7

%

6

%

Q

3

''

>

P&

P&

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

*

>

P&

7

P&

6

P&

633

&

633

P

P&

処理系定義

&

''

+*(L

参照

処理系定義

P&

''

+*(L

参照

処理系定義

$P&

''

+*(L

参照

処理系定義

P&'

'

+*(L

参照

633

&

633

P

P&

33P

P

&

33P

P

PP

&

P

3

P

P

P

Q

&

3

7

&

P7

3

QR

3

P0

P0

Q

( &

R

R&

''

構築・コピー・解体

70

%

7  

60

%

6  &

<<

<<

<<

70

%

7  

60

%

6  &

>  

7

 6

0

 &

X &

>  7

6

0

%

>  7

 6

0

 &

P

&

''

反復子

 &

P

&

 &

P

&

P

 &

PP

&

P

 &

PP

&

''

容量

&

$P

&

$P

P$ 

&

''

修飾子

P0

 &

P0

 &

<<

<<

<<

 &

 &

$P

P0

 &

 &

>

 7

 6

0

 &

 &

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

*#

''

観察子

P

&

P

&

''

演算

P0

 &

P

P0

&

$P

P0

&

P

P0

 &

P

P

P0

&

P

P0

 &

P

P

P0

&

P

P0

 &

P

P

P

P0

&

R&

6

%%

>  7

6

0

>  7

6

0

 &

6

>  7

6

0

>  7

6

0

 &

6

[%

>  7

6

0

>  7

6

0

 &

6

>  7

6

0

>  7

6

0

 &

6

%

>  7

6

0

>  7

6

0

 &

6

%

>  7

6

0

>  7

6

0

 &

''

特化アルゴ リズム

6

>

 7

6

0

>  7

6

0

 &

R

のコンスト ラクタ

#)

,

# (

:)

,

:

効果  

比較子オブジェクト 及び 割付け子を用いて,空の

を構築する。

計算量  

定数。

/

==0

 ==

(

==

(

#)

,

# (

:)

,

:

効果  

比較子オブジェクト 及び 割付け子を用いて空

を構築し ,区間

7

の要素を挿入する。

計算量  

区間

7

がすでに

を用いて整列している場合,

に比例する。そうでない場合,

比例する。ここで,

は,

とする。

演算

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

*(

4)

4)

4)

4)

/(

0

4)

/(

0

4)

メンバ関数

,

,

及び

は,それぞれ,定値の版 及び 非定値の版をもつ。

それぞれの場合,定値の版が

を返し ,非定値の版が

)を返すことを除いて,二

つの版の振る舞いは,同一とする。

特化アルゴリズム

/

G(

(

#(

:0

!

 /G((#  (:  0 )

(

/G((#(:  0 )

効果  

( &

クラステンプレート

は,一意キーを備える( 高々一つのキー値を保持する )連想コンテナとし ,

キーそのものの高速検索を提供する。クラス

は,両進反復子を備える。

は,コンテナ,逆進可能コンテナ(

)及び 連想コンテナ(

)の要件すべてを満たす。

は,一意

キーのための(

)で記述されたほとんどの演算も提供する。すなわち,

は,

)の演算

を備

えるが,演算

を備えていない。

>

については,

及び

>

とする。

の記

述は,表のいずれでも記述されていないか 又は 追加意味情報をもつ

の演算だけについてとする。

Q

7

%

6

%

>

Q

3

''

>

P&

>

P&

7

P&

7

P&

6

P&

633

&

633

P

P&

処理系定義

&

''

+*(L

参照

処理系定義

P&

''

+*(L

参照

処理系定義

$P&

''

+*(L

参照

処理系定義

P&'

'

+*(L

参照

633

&

633

P

P&

33P

P

&

33P

P

PP

&

''

+*(*(*(L

構築・コピー・解体

70

%

7  

60

%

6  &

<<

<<

<<

70

%

7  

60

%

6  &

> 7

 6

0

 &

X &

> 7 

6

0

%

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

*)

> 7 6

0

 &

P

&

''

反復子

 &

P

&

 &

P

&

P

 &

PP

&

P

 &

PP

&

''

容量

&

$P

&

$P

P$ 

&

''

修飾子

P0

 &

P0

 &

<<

<<

<<

 &

 &

$P

P0

 &

 &

> 7

 6

0

 &

 &

''

観察子

P

&

P

&

''

集合演算

P0

&

$P

P0

&

P

P0

&

P

P0

&

P

P0

&

R&

6

%%

> 7 

6

0

> 7 

6

0

 &

6

> 7 

6

0

> 7 

6

0

 &

6

[%

> 7 

6

0

> 7 

6

0

 &

6

> 7 

6

0

> 7 

6

0

 &

6

%

> 7 

6

0

> 7 

6

0

 &

6

%

> 7 

6

0

> 7 

6

0

 &

''

特化アルゴ リズム

6

> 7

6

0

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

*

> 7 

6

0

 &

R

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

#)

,

# (

:)

,

:

効果  

比較子オブジェクト 及び 割付け子を用いて,空の

を構築する。

計算量  

定数。

/

==0

 ==

(

(

#)

,

# (

:)

,

:

効果  

比較子オブジェクト 及び 割付け子を用いて空の

を構築し ,区間

7

の要素を挿入する。

計算量  

区間

7

がすでに

の比較の下で整列している場合,

に比例する。そうでない場合,

に比例する。ここで,

とする。

特化アルゴリズム

/

G(

#(

:0

!

 /G(#(:  0 )

(

/G(#(:0 )

効果  

( &

クラステンプレート

は,同値キーに対応する( 同じキー値の多重コピーを保持し うる)

連想コンテナとし ,キーそのものの高速検索を提供する。クラス

は,両進反復子を備える。

は,コンテナ,逆進可能コンテナ(

)及び 連想コンテナ(

)の要件すべてを満たす。

は,多重キーのための

で記述されたほとんど の演算も提供する。すなわち,

は,

)の演算

を備えるが,演算

を備えていない。

>

については,

及び

>

する。

では,表のいずれでも記述されていないか 又は 追加意味情報をもつ

の演算だけについて記

述する。

Q

7

%

6

%

>

Q

3

''

>

P&

>

P&

7

P&

7

P&

6

P&

633

&

633

P

P&

処理系定義

&

''

+*(L

参照

処理系定義

P&

''

+*(L

参照

処理系定義

$P&

''

+*(L

参照

処理系定義

P&'

'

+*(L

参照

633

&

633

P

P&

33P

P

&

33P

P

PP

&

''

構築・コピー・解体

70

%

7  

60

%

6  &

<<

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

**

<<

<<

70

%

7  

60

%

6  &

> 7

 6

0

 &

X &

> 7

 6

0

%

> 7

 6

0

 &

P

&

''

反復子

 &

P

&

 &

P

&

P

 &

PP

&

P

 &

PP

&

''

容量

&

$P

&

$P

P$ 

&

''

修飾子

P0

 &

P0

 &

<<

<<

<<

 &

 &

$P

P0

 &

 &

>

7

 6

0

 &

 &

''

観察子

P

&

P

&

''

集合演算

P0

&

$P

P0

&

P

P0

&

P

P0

&

P

P0

&

R&

6

%%

> 7

6

0

> 7

6

0

 &

6

> 7

6

0

> 7

6

0

 &

6

[%

> 7

6

0

> 7

6

0

 &

6

> 7

6

0

> 7

6

0

 &

6

%

> 7

6

0

> 7

6

0

 &

6

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

%

> 7

6

0

> 7

6

0

 &

''

特化アルゴ リズム

6

>

7

6

0

> 7

6

0

 &

R

のコンスト ラクタ

#)

,

# (

:)

,

:

効果  

比較子オブジェクト 及び 割付け子を用いて,空の

を構築する。

計算量  

定数。

/

==0

 ==

(

(

#)

,

# (

:)

,

:

効果  

比較子オブジェクト 及び 割付け子を用いて,空の

を構築し,区間

7

の要素を挿入する。

計算量  

区間

7

がすでに

の比較の下で整列している場合,

に比例する。そうでない場合,

に比例する。ここで,

とする。

特化アルゴリズム

/

G(

#(

:0

!

 /G(# (:   0)

(

/G(#(:  0)

効果  

( &

#

クラステンプレート

ヘッダ

一覧

''

$P

のためのヘッダ

''

P

P

''

及び

P

のためのヘッダ

''

のためのヘッダ

Q

$P

A

&

''

+*(*(/(*

演算

$P

A

A

0

A0 

A0 &

$P

A

A

1

A0 

A0 &

$P

A

A

W

A0 

A0 &

$P

A

P

0

P

0

A0

 &

$P

A

P

0

P

0

A0

 &

R

ヘッダ

は,ビットの固定長列を表現し操作するためのクラステンプレート 及び 関係する関数を定義する。

Q

$P

A

Q

3

''

ビット参照

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

Q

&

 &

3

X &

0

%

 &

''

ST

%

&

0

%

0 &

''

ST

%

ST&

&

''

&

''

%

ST&

0

 &

''

ST( &

R&

''

+*(*(/(L

コンストラクタ

 &

 &

6

P

 6

0

P

 6

33

$

P

%

P

 6

33

$

P

%

P

 6

3

3

 &

''

+*(*(/(+

演算

A0

0%

A0

 &

A0

1%

A0

 &

A0

W%

A0

 &

A0

%$P

 &

A0

%$P

 &

A0

 &

A0

$P

%

 &

A0

 &

A0

$P

 &

A

&

A0

 &

A0

$P

 &

''

要素アクセス

ST$

P

&

''

ST&

のため

ST$

P

 &

''

ST&

のため

&

6

P

6

&

$P

&

$P

&

%%

A0

&

[%

A0

&

$P

&

&

&

A

$

P

&

A

$

P

&

R&

R

クラステンプレート

A

は,固定長

A

ビットからなる列を格納できるオブジェクトを記述する。

各ビットは,値ゼロ( 解除)又は

( 設定)を表現する。ビットを反転するとは,値のゼロを

に,

をゼロに変

えることとする。各ビットは,非負の位置

をもつ。クラス

A

のオブジェクトと汎整数型の値との間の

変換においては,ビット位置

は,ビット値

:L

;

に対応する。二つ以上のビットに対応する汎整数値は,

各ビット値の和とする。

で記述する関数は,それぞれ異なる例外に関連する,次の

種類のエラーを報告する。

不当な実引数エラーは,型

*

)の例外に関連する。

区間外エラーは,型

*#

)の例外に関連する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

オーバフローエラーは,型

*

)の例外に関連する。

#

のコンスト ラクタ

効果  

クラス

A

のオブジェクトを,すべてのビットをゼロに初期化して,構築する。

!

効果  

クラス

A

のオブジェクトを,最初から

個のビ ット位置を

の対応するビット値に初期化して,

構築する。

は,

A

と値

7;6E

"<

!

$

との小さいほうとする

A

のとき,残り

のビット位置は,ゼロに初期化される。

/

(

(

:0

/(

(

:0)

(

/(

(

:0&&'

,

(

/(

(

:0&&'

,

/(

(

:0&&

要件  

($ 

例外  

($ 

のとき,

を送出する。

効果  

初期化する文字列の実効長

(

0

を,

($ 

との小さいほうと決定する。位置

で始まる

における

(

0

文字のどれかが

又は

でないとき,関数は,

を送出する。それ以外のとき,

関数は,クラス

A

のオブジェクトを,最初から

個のビット位置を文字列

の対応する文字から決定さ

れる値に初期化して,構築する。

は,

A

(

0

の小さいほうとする。

構築される文字列の要素の値は,位置

で始まる

の対応する文字が

のとき,ゼロとする。それ以外のと

き,要素の値は

とする。文字位置

:

;

が,ビット位置ゼロに対応する。引き続き減少する文字位置は,

増大するビット位置に対応する。

A

のとき,残りのビット位置は,ゼロに初期化される。

#

のメンバ

/0)

),

/0)

効果  

!

の指すオブジェクトの中の,

の対応するビットがクリアされているビットをクリアする。そうでな

いビットは変更しない。

返却値  

!

/0)

H,

/0)

効果  

!

の指すオブジェクトの中の,

の対応するビットがセットされているビットをセットする。そうでな

いビットは変更しない。

返却値  

!

A0

W%

A0

 &

!

の指すオブジェクトの中の,

の対応するビットがセットされているビットを反転する。そうでないビッ

トは変更しない。

返却値  

!

/0)

//, '

効果  

!

の指すオブジェクトの中の位置

/

の各ビットを,次に示す値で置き換える。

/

のとき,新しい値をゼロとする。

/

のとき,新しい値を位置

/

のビットの以前の値とする。

返却値  

!

/0)

00, '

マクロ

7D"E

は,

)で定義する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

効果  

!

の指すオブジェクトの中の位置

/

の各ビットを,次に示す値で置き換える。

A

/

のとき,新しい値をゼロとする。

A

/

のとき,新しい値を位置

/

#

のビットの以前の値とする。

返却値  

!

/0)

効果  

!

のすべてのビットをセットする。

返却値  

!

/0)

 '

(

!

,

要件  

は妥当とする。

例外  

が妥当なビット位置に対応しない場合,

を送出する。

効果  

!

において,位置

のビットに新しい値を格納する。

が非ゼロのとき格納値を

,それ以外のとき

ゼロとする。

返却値  

!

/0)

効果  

!

内の全ビットをリセットする。

返却値  

!

/0)

 '

要件  

は妥当とする。

例外  

が妥当なビット位置に対応しない場合,

を送出する。

効果  

!

において,位置

のビットをリセットする。

返却値  

!

/0

.

効果  

クラス

A

のオブジェクト

を構築し ,

!

で初期化する。

返却値  

/0)

効果  

!

内の全ビットを反転する。

返却値  

!

/0)

 '

要件  

は妥当とする。

例外  

が妥当なビット位置に対応しない場合,

を送出する。

効果  

!

内の位置

のビットを反転する。

返却値  

!

例外  

!

内のビットに対応する汎整数値

が型

で表現できない場合,

を送出

する。

返却値  

/

(

(

:0

/(

(

:0

効果  

適当な型の文字列オブジェクトを構築し ,長さ

A

文字の文字列に初期化する。各文字は,

!

内の対応ビッ

ト位置の値で決定される。文字位置

A

は,ビット位置ゼロに対応する。引き続き減少する文字位置は,増大する

ビット位置に対応する。ビット値ゼロは,文字

.

になり,ビット値

は,文字

L

になる。

返却値  

生成されたオブジェクト。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

'

返却値  

!

内のセットされているビットの個数。

'

'

返却値  

A

,,

/0)

返却値  

!

内の各ビットの値が

の対応するビットの値に等しい場合,非ゼロ値を返す。

-,

/0)

返却値  

[!

%%

のとき,非ゼロ値を返す。

 '

要件  

は妥当とする。

例外  

が妥当なビット位置に対応しない場合,

を送出する。

返却値  

!

内の位置

のビットが値

のとき,

を返す。

返却値  

!

内のいずれかのビットが値

のとき,

を返す。

返却値  

!

内のどのビットも値

でない場合,

を返す。

/0

// '

返却値  

A!

%

/0

00 '

返却値  

A!

%

*+ '

要件  

は妥当とする。

例外  

なし 。

返却値  

/0&&

*+ '

要件  

は妥当とする。

例外  

なし 。

返却値  

A33

のオブジェクトであって,条件

! ST

%%

を満たし ,

! ST

%

と等価なものを返す。

#

演算

/0

)

/0)

(

/0)

返却値  

0%

/0

H

/0)

(

/0)

返却値  

1%

/0

I

/0)

(

/0)

返却値  

W

%

/

(

(

'

0

/(

0)

00 /  (

0)

(

/0)

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

#

書式付き入力関数(

)(

効果  

から

A

個(バイト単位)の文字をできるだけ抽出する。これらの文字を型

の一時オブジェクト

に格納する。そして,式

%

を評価する。文字は,次のどれかが生じるまで,抽出され格納される。

A

文字が抽出され格納された。

入力列上でファイルの終わりが生じた。

次の入力文字が

.

でも

L

でもなかった(この場合,その入力文字は抽出されない。)

に文字が格納されない場合,

(

33

が呼ばれる。

(これは,

33

を送

出するかもしれない。)

)

参照)

返却値  

/

(

(

'

0

/(

0)

// /  (

0)

(

/0)

返却値  

(

を返す(

)(#

参照)

反復子

では,

"##

プログラムがコンテナ(

),ストリーム(

)(

)及び ストリームバッファ(

)#

の上で反復処理を遂行するのに使うライブラリを規定する。

ここで規定する項目を,

)

に示す。

)

 反復子ライブラリの要約

箇条

ヘッダ

要件

反復子の基本的要素

あらかじめ定義された反復子

#

ストリーム反復子

反復子に対する要件

反復子は,

"##

プログラムが異なるデータ構造

コンテナ

を一様に扱えるようなポイ

ンタの一般化とする。異なる種類のデータ構造に正確かつ効率的に働くテンプレートアルゴ リズムを構築できるよう

にするため,ライブラリは,反復子のインタフェースだけでなく意味論 及び 計算量の仮定を形式化する。すべての

反復子

は,式

!

を受け付ける。結果は,クラス,列挙体,又は 組込み型

の値とし ,その型を反復子の値型と呼

ぶ。式

! (

が適切に定義されたすべての反復子

は,

! (

と同じ意味の式

V

を受け付ける。等価性が定義

されたすべての反復子型

5

については,反復子の差分型と呼ばれる符号付き汎整数型が対応する。

反復子は

,

ポインタの抽象なので,その意味論は,

"##

でのポインタの意味論のほとんどを一般化したものとな

る。したがって,反復子を取るすべての関数テンプレートは,本来のポインタに対しても働くことが保証されている。

この規定は,演算に基づいて反復子を五つのカテゴ リ,入力反復子,出力反復子,前進反復子,両進反復子 及び ラ

ンダムアクセス反復子に分類する(

)

参照)

)

 反復子カテゴリの関係

ランダムアクセス

→両進

→前進

→入力

→出力

前進反復子は,入力反復子・出力反復子のすべての要件を満たす。したがって,入力反復子 又は 出力反復子が規

定されている箇所であればどこにでも使うことができる。両進反復子は,前進反復子のすべての要件を満たす。した

がって,前進反復子が使える箇所であればどこにでも使うことができる。ランダムアクセス反復子は,両進反復子の

すべての要件を満たす。したがって,両進反復子が使える箇所であればどこにでも使うことができる。

前進反復子,両進反復子 及び ランダムアクセス反復子のカテゴ リに加えて,反復子

は,式

!

の結果が参照と

して振る舞うか定数への参照として振る舞うかに応じて,変更可能 又は 定数という。定数反復子は,出力反復子の

要件を満たさず,

( 定数反復子

の)式

!

の結果は,式中で左辺値が要求されるときに使ってはならない。

配列への元来のポインタが,配列の最終要素の次の位置を指すポインタ値の存在を保証するように,任意の反復子

型には,対応コンテナの最終要素の次の位置を指す反復子値が存在する。この値を,末尾の次の値と呼ぶ。式

!

定義されている反復子

を,参照はずし可能と呼ぶ。ライブラリは,末尾の次の値が参照はずし可能であるとは仮定

しない。反復子は,どのコンテナにも関連しない特異値をもつこともできる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

(

!

&

でのように )ポインタ

を未初期化で宣言した後では,ポインタ

が特異値をもつと常に仮

定する。

式の結果は,特異値に対しては未定義とする。ただし,特異値をもつ反復子への非特異値の代入だけは例外とする。こ

の場合,その特異値は,ほかの値をもつ場合と同様に,上書きされる。参照はずし可能な値は,常に非特異値とする。

反復子

が反復子

から到達可能であるとは,式

))

を有限回適用することによって

%%

となることとする。

から到達可能ならば ,それらは同じコンテナを参照している。

データ構造を操作するほとんどのライブラリのアルゴ リズムテンプレートは,区間を使うインタフェースをもつ。

区間は,計算の開始と終了を指し示す反復子の対とする。区間

は,空区間とする。一般に,区間

は,

データ構造の中の,

によって指される要素から始めて

によって指される要素を含まない手前までの要素を参照す

る。区間

は,

が到達可能であるとき,かつそのときに限って,正当であるという。正当でない区間へのラ

イブラリ関数の適用結果は,未定義とする。

反復子の全カテゴ リは,そのカテゴ リに対して(ならし )定数時間で実現可能な関数だけを要件とする。したがっ

て,反復子の要件表には,計算量の欄がない。

#

では,

及び

は,

5

の値を示す。

は,差分型

#

の値を示す。

及び

は,識別子

を示す。

は,値を示す。

入力反復子

クラス 又は 組込み型

5

は,

)

の式が正当ならば,

を値型とする入力反復子の要件を満た

す。ただし,

G

は型

のメンバのいずれかの型とする。

)

では,

%%

の定義域という用語は,通常の数学的意味で,

%%

が定義されている( 必要のある)対象値の集合

を表す。この集合は,時間とともに変化してよい。アルゴ リズムそれぞれは,使用する反復子の値に対する

%%

の定

義域に要件を追加することがある。このような要件は,そのアルゴ リズム中での

%%

及び

[%

の使い方から推論する

ことができる。

呼出し

   

は,

の値が次のとおりの特性

をもつ場合にだけ定義される。すなわち,

が特

をもち,値

が,

!%% 

又は

![%

かつ

))

が特性

をもつ

ならば特性

をもつ場合である。

)

 入力反復子の要件

演算

意味,事前条件,事後条件  

5

 &

5

事後条件  

のコピーとする。デストラクタが存在しアクセス可能

と仮定する。

%

&

50

結果  

事後条件  

のコピーとする。

%%

に変換可能

%%

は定義域上の同値関係とする。

[%

に変換可能

%%

の定義域上で

%% 

[%

[% 

!

に変換可能

事前条件  

は参照はずし可能。

%%

かつ

%%

の定義域上で

  

の場合,

!

!

と同値とする。

V

事前条件  

! (

は,適切に定義されている。

! (

と同値とする。

))

50

事前条件  

は参照はずし可能。

事後条件  

は参照はずし可能 又は末尾の次を指す。

事後条件  

の以前の値のコピーはどれも,参照はずし可能でなくても,

%%

の領域内でなくてもよい。

 ))

 ))

と同値とする。

!))

%

!&

))&

&

参考

入力反復子では,

%%

であっても

))

%%

))

であるとは限らない。

( 等価性は,代入特性 及び 参

照透過性を保証しない。)入力反復子のアルゴ リズムは,同じ反復子を

度以上通過することがないのが

望ましい。つまり,単一パスアルゴ リズムとすることが望ましい。値型

は,代入可能型(

)である

必要はない。入力反復子のアルゴ リズムには,クラス

を使って,入力データのソース

として入力ストリームを用いてよい。

出力反復子

クラス 又は 組込み型

5

は,

5

が代入可能な型であり,かつ,

)

に示す式が正当であれば ,

出力反復子の要件を満たす。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

)

)

 出力反復子の要件

返却値の型

操作の意味

表明,備考,事前条件,事後条件

%

は,

%

と同値とする。

備考  

デストラクタを仮定する。

5

 &

5

%

&

!

%

結果は使われない。

))

50

0

%%

0))

))

50

に変換可能

5

%

&

))&

&

!))

%

結果は使われない。

参考

!

は,代入文の左辺にだけ使うことができる。反復子の同じ値を介しての代入は,一度しか起こ

らない。出力反復子のアルゴ リズムは,同じ反復子を

度以上通過しないことが望ましい。つまり,単一パ

スアルゴ リズムであることが望ましい。等価性 及び 非等価性が,定義されていないかもしれない。出力反

復子のアルゴ リズムには,挿入反復子 及び 挿入ポインタを用いるのと同様に,クラス

を使って,出力ストリームをデータの格納先に用いることができる。

前進反復子

クラス 又は 組込み型

5

は,

)

に示す式が正当であれば ,前進反復子の要件を満たす。

)

 前進反復子の要件

返却値の型

操作の意味

表明,備考,事前条件,事後条件

5

&

備考  

は特異値をもつかもしれない。

備考  

デストラクタが仮定される。

備考  

は,特異かもしれない。

%%

5

 &

5

&

%

&

事後条件  

%%

5

%

&

%%

に変換可能

%%

は同値関係とする。

[%

に変換可能

[

%%

%

50

事後条件  

%%

!

0

事前条件  

は参照はずし可能。

%%

の場合,

!

%%

!

となる。

5

が変更可能な場合,

!

%

正当とする。

V

G0

! (

事前条件  

! (

は,適切に定義

されている。

))

50

事前条件  

は参照はずし可能。

事後条件  

は参照はずし可能 又は

末尾の次を指す。

%%

及び

が参照はずし可能な場合

))

%%

))

を含意する。

0

%%

0))

))

50

%

&

))&

変換可能。

&

!))

0

とが同値のとき,

及び

がともに参照はずし可能であるか,又は ど ちらも参照はずし不可能であ

るかど ちらかとなる。

及び

がともに参照はずし 可能であるなら,

%%

の必要十分条件は,

!

及び

!

がともに同じオブ

ジェクトであることとする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

参考

%%

であれば

))

%%

))

となる条件(これは,入力反復子 及び 出力反復子について成り立たな

い。)の下では,反復子を介しての代入の回数への制限を解除(これは,出力反復子に当てはまる。)すれ

ば ,前進反復子でのマルチパス一方向アルゴ リズム使用が可能とする。

両進反復子

クラス 又は 組込み型

5

は,前進反復子の要件を満たした上で,

)#

に示す式が正当となって

いるのであれば ,両進反復子の要件を満たす。

)#

 両進反復子の要件

( 前進反復子の要件に追加して)

返却値の型

操作の意味

表明,備考,事前条件,事後条件  

VV

50

事前条件  

%%

))

となる

が存在する。

事後条件  

が参照はずし可能。

VV)) 

%%

VV

%%

VV

の場合,

%%

となる。

0

%%

0VV

VV

50

5

%%

&

に変換可能。

VV

&

!VV

に変換可能。

参考

両進反復子は,アルゴ リズムに反復子の前進だけでなく逆進も許す。

#

ランダムアクセス反復子

クラス 又は 組込み型

5

は,両進反復子の要件を満たした上で,

)(

に示す式が

正当となっているのであれば ,ランダムアクセス反復子の要件を満たす。

)(

ランダムアクセス反復子の要件

( 両進反復子の要件に追加して )

返却値の型

操作の意味

表明,備考,事前条件,事後条件

)%

50

#

%

&

%

VV 

))&

)) 

VV&

&

)

5

%

&

5

)%

&

)

%%

)

)

V%

50

)%

V&

V

5

5

%

&

V%

&

2

#

 2

  3

事前条件  

)

%%

かつ

V  

%%

)

V

となる

#

の値

が存在する。

ST

に変換可能

!

)

に変換可能

V

.

は,全順序関係

に変換可能

は,

と反対の全順序関係

%

に変換可能

[

%

に変換可能

[

  

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

*

ヘッダ

一覧

Q

''

+M(*

基本的要素

<

P

&

P

!&

#

%

C

%

E

%

0

&

PP

QR&

PP

QR&

P

P

3

PP

QR&

P

P

3

PP

QR&

PP

P

3

P

P

QR&

''

+M(*(M

反復子の演算

<< 

#

<<

0

#

 &

<<

P

<

<

3

3

P

<<

<<

 &

''

+M(M

あらかじめ定義された反復子

<

P

&

<

%%

P

<

0

P

<

0

 &

<

P

<

0

P

<

0

 &

<

[%

P

<

0

P

<

0

 &

<

P

<

0

P

<

0

 &

<

%

P

<

0

P

<

0

 &

<

%

P

<

0

P

<

0

 &

<

P

<

3

3

P

V

P

<

0

P

<

0

 &

<

P

<

)

P

<

33

P

P

<

0

 &

7

PP

&

7

PP

7

P7

0

 &

7

PP

&

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

7

PP

7

P7

0

 &

7

P&

<

P

7

7

0

<

 &

''

+M(/

ストリーム反復子

%

%

P

#

%

P

P&

#

%%

P

 #

0

P

 #

0

 &

#

[%

P

 #

0

P

 #

0

 &

%

%

P

P&

%

P

P

&

%%

P

0

P

0

 &

[%

P

0

P

0

 &

%

P

P

&

R

反復子の基本的要素

反復子の定義作業を簡単にするために,反復子ライブラリは,いくつかのクラス 及び

関数を提供する。

反復子の特性

アルゴ リズムを反復子で実装するには,多くの場合,その反復子の型に対応する値型 及び 差

分型を決定する必要が生じる。したがって,

<

を反復子の型とするとき,その反復子の差分型,値型,及び

反復子カテゴ リとして,次に示す型が定義されていなければならない。

P<

33

P

P<

33

P

P<

33

P

出力反復子の場合,次の型は,

と定義しておく。

P<

33

P

P<

33

P

テンプレート

<

の定義は,次のとおりとする。

<

P

Q

<33

P

P&

<33

P

P&

<33

&

<33

&

<33

P

P

&

R&

ポインタ用の特殊化は,次のとおりとする。

P

!

Q

P

P&

P&

!

&

0

&

PP

P

P

&

R&

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

さらに,定値へのポインタ用には,次のとおりに特殊化する。

P

!

Q

P

P&

P&

!

&

0

&

PP

P

P

&

R&

参考

差分が型

となるポインタ型

も存在している場合,処理系は,次の定義を用意してもよい。

P

PP!

Q

P&

P&

PP!

&

PP0

&

PP

P

P

&

R&

"##

プログラムでは,はん用の逆転関数を次のとおりに実装することができる。

"<

"

<

"<

Q

P

"

<

33

P

%

 &

VV&

Q

P"

<

3

3

P

%

!&

!))

%

!VV&

!

%

&

V%

+&

R

R

基本的な反復子

テンプレート

を基本クラスとして用いることで,新しい反復子に必要な型を簡

単に定義できる。

Q

#

%

C

%

E

%

0

Q

P&

#

P&

C

&

E

&

7

P

&

R&

R

標準反復子タグ

関数テンプレート特殊化の反復子実引数に対しては,最適なカテゴリを選択することで,コン

パイル時に最も効率的なアルゴリズムが選べるようにするのが,多くの場合望ましい。このため,ライブラリは,アルゴ

リズム選択のコンパイル時タグ用としてカテゴリタグクラスを導入する。カテゴリタグクラスは,

,

,

,

及び

とする。型

<

のすべての反復子に対して,反復子の振る舞いを記述する最も特化されたカテゴ リタグとして

<

33

を定義しておかなければならない。

Q

PP

QR&

PP

QR&

PP

3

PP

QR&

P

P

3

P

P

QR&

PP

P

3

P

P

QR&

R

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

プログラムで定義する反復子

"<

は,テンプレート

を次のとおり特

殊化することによって両進反復子カテゴ リに含めることができる。

P

"

<

Q

P

P&

P&

!

&

0

&

P

P

P

&

R&

しかし ,普通は,

 

 ! 0

から

"<

を導出するほうが容易である。

が両進反復子として適切に定義されてはいるものの,ランダ ムアクセス反復子としてより効率

的に実装するのであれば ,次のようになる。

"<

"

<

"<

Q

P

"

<

33

P

 &

R

"<

"

<

"<

P

P

Q

''

(((

より一般的だが効率は劣るアルゴ リズム

R

E6<

E6

<

E6<

PP

P

Q

''

(((

より効率的だが一般性に劣るアルゴ リズム

R

"##

プログラムが

を含むデータ構造に対する両進反復子をその処理系での大規模メモリモデル

用に定義したければ,次のようにすればよい。

@<

3

P

P

0

Q

''

))

などを実装するコード

R&

こうすると,テンプレート

を特殊化する必要はない。

反復子の演算

演算

)

及び

V

を提供しているのは,ランダムアクセス反復子だけなので,反復子ライブラリ

は,二つの関数テンプレート

及び

を提供する。これらの関数テンプレートは,ランダムアクセス

反復子に対しては,その

)

及び

V

を使う。

ゆえに,定数時間となる。)入力反復子,前進反復子 及び 両進反復子に

は,

))

を用いて線形時間で実装する。

/

==(

J0

!

! ==)

(

J

要件  

は,ランダムアクセス反復子 及び 両進反復子についてだけ負であってよい。

効果  

反復子の参照

だけ増やす。

が負のとき減らす。)

/

==0

/==  0&&    

 ==

(

==

効果  

から

まで達するのに必要となる増分操作回数 又は 減分操作回数を返す。

要件  

は,

から到達可能でなければならない。

あらかじめ定義された反復子

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

逆進反復子

両進反復子 及び ランダムアクセス反復子は,それぞれデータ構造の上を逆方向になぞる逆進

反復子アダプタ

をもつ。それらは,元の反復子と同じシグネチャをもつ。逆進反復子と元の反復

との基本的関係は,同一性

0!

  

%%

0!

V

で確立される。

この対応付けは,配列の末尾の次を指すポインタは常に存在するが,配列の先頭の前を指す正当なポインタは存在

しないかもしれないという事実から導き出せる。

クラステンプレート

Q

<

P

3

P

<

33

P

P

<

33

P

P

<

33

P

P

<

33

P

<

33

Q

3

<

&

3

<

P&

P<

33

P

P

&

P<

33

&

P<

33

&

P

 &

P

<

 &

G

P

P

G

0

 &

<

&

''

明示的

&

&

P0

)) &

P

)) &

P0

VV &

P

VV &

P

)

P

&

P0

)%

P

 &

P

V

P

&

P0

V%

P

 &

ST

P

&

R&

<

%%

P

<

0

P

<

0

 &

<

P

<

0

P

<

0

 &

<

[%

P

<

0

P

<

0

 &

<

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

P

<

0

P

<

0

 &

<

%

P

<

0

P

<

0

 &

<

%

P

<

0

P

<

0

 &

<

P

<

3

3

P

V

P

<

0

P

<

0

 &

<

P

<

)

P

<

33

P

P

<

0

 &

R

逆進反復子の要件

逆進反復子のテンプレート仮引数

<

は,両進反復子のすべての要件(

を満たさなければならない。

更に,

<

は,メンバ

)

)

),

V

*

),

)%

),

V%

)若しくは

ST

) 又は 大域演算子

),

#

%

)

%

(

V

若しくは

)

*

),のいずれかが具現化(

)

)を要する形で参照された場合,ランダムアク

セス反復子の要件(

#

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

の演算

のコンスト ラクタ

! = 

効果  

で初期化する。

/

20

!

!/20

)

効果  

(

で初期化する。

変換

=

EE

明示的

返却値  

!

$

効果  

<

%

&

!VV&

V

A0

効果  

0!  &

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

#

#

))

!)

%%

効果  

VV&

返却値  

!

!

%%

効果  

P

%

!&

VV&

&

(

VV

!)

AA

効果  

))

返却値  

!

!

AA

効果  

P

%

!&

))&

&

)

)

!

%

!/= 0&&    

返却値  

)%

!)

%,

!/= 0& &   

効果  

V%

&

返却値  

!

*

V

!

A

!/= 0&&    

返却値  

V%

!)

A,

!/= 0& &   

効果  

)%

&

返却値  

!

ST

*+

!/= 0& &   

返却値  

SVVLT

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

(

%%

/

=0

,, 

!/= 0)

(

!/= 0)

返却値  

(

%%

(

/

=0

!/= 0)

(

!/= 0)

返却値  

(

(

[%

/

=0

-, 

!/= 0)

(

!/= 0)

返却値  

(

[%

(

#

/

=0

!/= 0)

(

!/= 0)

返却値  

(

(

(

%

/

=0

0, 

!/= 0)

(

!/= 0)

返却値  

(

%

(

)

%

/

=0

/, 

!/= 0)

(

!/= 0)

返却値  

(

%

(

V

/

=0

!/= 0&&    

!/= 0)

(

!/= 0)

返却値  

(

V

(

*

)

/

=0

!/=0

!/=0 &&    

(

!/= 0)

返却値  

<

(

V

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

)

挿入反復子

挿入を配列への書込みと同じように扱えるようにするために,挿入反復子と呼ばれる特別な反

復子アダプタがライブラリに提供されている。次のコード は,通常の反復子クラスの場合,区間

から始まる区間にコピーする。

[%

!))

%

!))&

が挿入反復子のとき,この同じコード が,対応する要素をコンテナの中に挿入する。挿入反復子の仕掛け

によって,ライブラリ中のすべてのコピーアルゴ リズムが,通常の上書きモード ではなく,挿入モード で働くように

なる。

挿入反復子は,コンテナとそのコンテナの反復子とから構築される。そのコンテナの反復子は,コンテナの先頭 又は

末尾に位置するのでない限り,挿入が生じる位置を指し示す。挿入反復子は,出力反復子の要件を満たす。

!

は,挿入反復子自身を返す。代入の

%

0

は,挿入反復子への書込みを行うように定義され,挿

入反復子が指している丁度手前に

を挿入する。言い換えると,挿入反復子はコンテナの中の挿入箇所を指し 示す

カーソルのようなものとなる。

は要素をコンテナの末尾に挿入し,

は要素をコンテナの先頭に挿入し ,

は要素をコンテナで反復子が指しているところに挿入する。

及び

が,コンテナから挿入反復子を作る三つの関数となる。

クラステンプレート

Q

7

PP

3

P

P

Q

3

7!

&

3

7

P&

PP

7

0

 &

PP

7

0

%

733

P

 &

PP

7

0

! &

PP

7

0

)) &

PP

7

)) &

R&

7

PP

7

P7

0

 &

R

の演算

のコンスト ラクタ

4 #  )

効果  

0

で初期化する。

33

%

4/#  0)

,

#&& 

!

効果  

V

 &

返却値  

!

33

!

4/#  0)

$

返却値  

!

33

))

4/#  0)

%%

4/#  0

%%

返却値  

!

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

/

#0

4/#  0

4 #)

返却値  

7

クラステンプレート

Q

7

PP

3

P

P

Q

3

7!

&

3

7

P&

PP

7

0

 &

PP

7

0

%

733

P

 &

PP

7

0

! &

PP

7

0

)) &

PP

7

)) &

R&

7

PP

7

P

7

0

 &

R

の演算

のコンスト ラクタ

 #   )

効果  

0

で初期化する。

33

%

/#  0 )

,

#&& 

!

効果  

V

 &

返却値  

!

33

!

/#  0 )

$

返却値  

!

33

))

/#  0 )

%%

/#  0

%%

返却値  

!

#

/

#0

/#  0

 #)

返却値  

7

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

*

#

クラステンプレート

Q

7

P

3

P

P

Q

3

7!

&

733

&

3

7

P&

P

7

0

733

 &

P

7

0

%

733

P

 &

P

7

0

! &

P

7

0

)) &

P

7

0

)) &

R&

<

P

7

7

0

<

 &

R

(

の演算

(

のコンスト ラクタ

 # )

(

#&&

効果  

0

で初期化し ,

で初期化する。

(

33

%

/# 0)

,

#&& 

!

効果  

%

V

 &

))&

返却値  

!

(

33

!

/# 0)

$

返却値  

!

(

33

)

)

/# 0)

%%

/# 0)

%%

返却値  

!

(#

/

#(

=0

/# 0

 #)

(

=

返却値  

7

733

#

スト リーム反復子

アルゴ リズムテンプレートが入出力ストリームに直接に作用できるように,適切な反復子

形式のクラステンプレートが提供されている。

この例は,浮動小数点数を含むファイルを

から読み取り,部分和を

に印刷する。

PP

P

  

P

  

P

Y4Y  &

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

クラステンプレート

は,その構築の際の対象とした入力ストリー

ムから,

を使って)順次要素を読み取る。構築された後

))

が使われるごとに,この反復子は,

の値

を読み取って貯える。ストリームが終端に達する( ストリームの

を返す。)と,反復子

は,ストリーム終端を表す反復子の値と同値となる。実引数のないコンストラクタ

は,常に,

ストリーム終端入力反復子オブジェクトを構築する。これは,終端状態で使用できる唯一の正当な反復子となる。ス

ト リーム末尾での

!

の結果は未定義とする。他の反復子値に対しては,

0

が返される。このスト

リーム末尾での

V

の結果は,未定義とする。他の反復子値に対しては,

!

が返される。ストリー

ム反復子の中に何かを格納することはできない。入力ストリーム反復子の主な特色は,

))

演算子が等価性保存でない

という事実に見られる。すなわち,

%%

))

%%

))

を全く保証しないことにある。

))

が使われるたびに,新

しい値が読み取られる。

この事実の帰結として,入力ストリーム反復子は,実際上,

パスアルゴ リズムにしか用いることができない。マ

ルチパスアルゴ リズムにはメモリ内データ構造を使うほうが常により適切なので,実際のところこれで問題がない。

二つのストリーム終端反復子は,常に等しい。ストリーム終端反復子は,ストリーム非終端反復子とは等しくない。

二つのストリーム非終端反復子は,同じ ストリームから構築されたときには,等しい。

%

%

P

#

%

P

P

3

P

P

0

3

P&

P&

P

P&

P

&

P

P

0

 &

P

P

 #

0

 &

X

P

 &

0

&

!

&

P

#

0

)) &

P

#

)) &

3

''P

!

$

#&

説明用

''

&

説明用

&

#

%%

P

#

0

P

 #

0

 &

#

[%

P

#

0

P

 #

0

 &

#

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

効果  

ストリーム終端反復子を構築する。

   )

効果  

$

#

で初期化する。

は,構築の途中 又は 最初に参照されるときに初期化される。

/( ( ( J  0)

効果  

のコピーを構築する。

.

効果  

反復子が解体される。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

の演算

)

$

返却値  

$

A0

返却値  

0!  

/((  ( J  0)

%%

効果  

!

$

#

返却値  

!

/((  ( J  0)

%%

効果  

P

#

%

!&

!

$

#

&

 &

/

(

(

(

J0

,,

/((  (J  0

)

(

/((  (J  0

)

返却値  

(

$

#

%%

(

$

#

クラステンプレート

は,構築の対象とした出力ストリーム上に順

次(

を用いて )要素を書き込む。

!

型のコンストラクタへの実引数をもって構築された場合,この

文字列を区切り文字列と呼ぶ。区切り文字列は,

がストリームに書き出されるごとに続けてストリームに書き出さ

れる。出力反復子から値を得ることはできない。この出力反復子の用途は,次のような状況に限られる。

[%

!))

%

!))&

の定義は,次のとおりとする。

%

%

P

P

3

P

P

3

P&

P&

P

P&

P

P

0

 &

P

P

0

!

 &

P

P

0

 &

XP

 &

P

0

%

0

 &

P

0

! &

P

0

)) &

P

0

)) &

3

''

P

!

$

#&

説明用

''

!

 #&

説明用

&

#

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

   )

効果  

$

#

で初期化し ,

 #

をナルで初期化する。

   )

(

$

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

効果  

$

#

で初期化し ,

 #

で初期化する。

)

効果  

のコピーを構築する。

.

効果  

反復子そのものが解体される。

#

の演算

)

,

)

効果  

!

$

#

&

 #

[%

!

$

#

 #&

! &

)

$

返却値  

!

)

%%

)

%%

返却値  

!

#

クラステンプレート

%

P

P

3

P

P

33P

0

3

P&

P&

33P

P&

P

P&

P

P&

&

''

説明用

3

P

 &

P

P

0

 &

P

P

!

 &

P

0

 &

&

P

0

)) &

)) &

P

0

&

3

P!

%

&

''

説明用

&

%%

P

0

P

0

 &

[%

P

0

P

0

 &

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

クラステンプレート

は,構築の対象としたストリームバッファから順次文字を読み取る。

!

は,現在の入力文字へのアクセスを提供する(現在の入力文字がある場合)

))

が評価されるたび

に,反復子は,次の入力文字へと進む。ストリーム終端に到達したら(

33 

は,

33 

を返す。),反復子は,ストリーム終端反復子値と等価となる。省略時コンストラクタ

及び

コンストラクタ

は,ど ちらも,区間終端として用いるのに適したストリーム終端反復子オ

ブジェクトを構築する。

ストリーム終端での

の結果は未定義とする。そのほかの反復子値に対しては,

型の値が

返される。入力反復子を介して文字を代入することはできない。

入力反復子においては,

))

演算子が等価性保存でない,すなわち,

%%

))

%%

))

を一切保証しない。

))

が評価されるたびに,新しい値が用いられる。

この事実によって,実際,

オブジェクトは,

パスアルゴ リズムにしか用いられない。二つ

のストリーム終端反復子は,常に等しい。ストリーム終端反復子は,ストリーム非終端反復子と等しくない。

#

クラステンプレート

33

%

P

P

33

&

''

説明用

P

!

%

&

P

!

 &

3

  

%

3

&

&

クラス

3

3

は,説明のためだけとする。実装では,この名前のクラス

を提供しないで,同等の機能を提供することを許す。クラス

3

3

は,事

後増分演算子(

))

)の返却値としての一時的な仮の場所を提供する。それは,反復子の以前の値によって指

される文字を保持して,将来起こりうるその文字を得ようとするアクセスに備える。

#

のコンスト ラクタ

効果  

ストリーム終端反復子を構築する。

    / (  0 )

    /  (  0$

効果  

オブジェクト,

!(  

,又は

!

をそれぞれ使う

を構

築する。

がナルのとき,ストリーム終端反復子を構築する。

)

効果  

オブジェクトのコンストラクタの実引数

$

によって指されている

オブジェクトを

使う

を構築する。

#

33

!

$

返却値  

メンバ

%

によって得られた文字。

#

33

)

)

/ (  0)

/ (  0&&  % %  

効果  

%

返却値  

!

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

/(  0& &  %%   

返却値  

%

V  

%

##

33

  )/  (  0)

返却値  

を返すのは,どの

オブジェクトを使っているかに関係なく,両方の反復子がストリーム終

端にある場合 又は ど ちらもストリーム終端にない場合で,しかもそのときに限る。

#(

%%

/

(

0

,,

/(  0)

(

/(  0)

返却値  

#)

[%

/

(

0

-,

/(  0)

(

/(  0)

返却値  

[( 

#

クラステンプレート

%

P

P

3

P

P

3

P&

P&

P

P&

P

P&

3

P

P

0

 &

P

P

!

 &

P

0

%

 &

P

0

! &

P

0

)) &

P

0

)) 

&

 &

3

P!

%

&

''

説明用

&

クラステンプレート

は,構築の際に対象とした出力ストリーム上に順次文字を書き込む。

出力反復子から文字値を得ることはできない。

#

のコンスト ラクタ

    )

要件  

がナルでない。

効果  

3

%

(  

    $

79

要件  

がナルでない。

効果  

3

%

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

#

#

の演算

/ (  0)

,

効果  

となるとき,

%

を呼ぶ。それ以外のとき,何の効果ももたない。

返却値  

!

/ (  0)

$

返却値  

!

/ (  0)

%%

/ (  0)

%%

返却値  

!

返却値  

メンバ

%

の以前の利用において,

%

への呼出しが

33 

を返すとき,

を返す。それ以外のとき,

を返す。

#

アルゴリズム

#

では,

"##

プログラムがコンテナ(

)及び その他の列に対するアルゴ リズム演算を行

うのに使うライブラリ要素を規定する。

ここで規定する項目を,

))

に示す。

))

アルゴリズムライブラリの要約

箇条

ヘッダ  

#

更新の伴わない列演算

#

更新を伴う列演算

#

整列 及び その関連演算

#

"

ライブラリのアルゴ リズム

ヘッダ

一覧

Q

''

+/(L

更新の伴わない列演算

<< 

9

9

P<<

<<

9

 &

<< 

<<

<<

<<

0

 &

<< 

C

<<

P<<

<<

C

 &

9<L 

9<+

9<L

P9

<

L

9<L

9<+

9<+

+ &

9<L 

9<+ 

"C

9<L

P9

<

L

9<L

9<+

9<+

"C

 &

9<L 

9<+

9<L

PP9

<

L

9<L

9<+

9<+

+ &

9<L 

9<+ 

"C

9<L

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

(

PP9

<

L

9<L

9<+

9<+

"C

 &

9<

9<

P9

<

9<

 &

9< 

"C

9<

P9

<

9<

"C

 &

<< 

P

<

<

3

3

P

<<

<<

0

 &

<< 

C

P

<

<

3

3

P

P<<

<<

C

 &

<<L 

<<+

<<

<<+

<<

L

<<L

<<+

+ &

<<L 

<<+ 

"C

<<

<<+

<<

L

<<L

<<+

"C

 &

<<L 

<<+

<<

L

<<L

<<+

+ &

<<L 

<<+ 

"C

<<

L

<<L

<<+

"C

 &

9<L 

9<+

9<L

9<

L

9<L

9<

+

9<+

+ &

9<L 

9<+ 

"C

9<L

9<

L

9<L

9<

+

9<+

"C

 &

9< 

F$ 

9<

P9<

9<

F$

0

 &

9< 

F$ 

"C

9<L

P9

<

9<

F$

0

"C

 &

''

+/(+

更新を伴う列演算

''

+/(+(L

コピー

<< 

B<

B<

<<

<<

B<

 &

"<

L

"<

+

"<

+

P

"<

L

"<

L

"<

+

 &

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

)

''

+/(+(+

交換

0

0

 &

9<L 

9<+

9<+

P9

<

L

9<L

9<+

+ &

9<L 

9<+

P9

<

L

9<+

 &

<< 

B< 

GB

B<

<

<

<<

B<

GB

 &

<<L 

<<+ 

B< 

"B

B<

<

<

L

<<L

<<+

B<

"B

P &

9< 

9

<

9<

0

0

P &

9< 

P9

<

9<

C

0

P &

<< 

B< 

B<

P<

<

<<

B<

0

0

P &

B< 

B<

PP

<

<

B<

C

0

P &

9< 

9<

9<

0

 &

B< 

F$ 

PB<

F$

0

 &

9< 

:

9

<

9<

:

 &

B< 

F$ 

:

PB

<

F$

:

 &

9< 

9<

9<

9<

0

 &

9< 

C

9<

P9

<

9<

C

 &

<< 

B< 

B<

P<

<

<<

B<

0

 &

<< 

B< 

C

B<

PP

<

<

<<

B<

C

 &

9<

9<

9<

9<

 &

9< 

"C

9<

9<

9<

"C

 &

<< 

B<

B<

P<

<

<<

B<

 &

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

<< 

B< 

"C

B<

P<

<

<<

B<

"C

 &

"<

"

<

"<

 &

"<

B<

B<

P"

<

"<

B<

 &

9<

9<

9<

9<

 &

9< 

B<

B<

P

9<

9<

9<

B<

 &

E6<

P

E

6

<

E6<

 &

E6<

EA:

P

E

6

<

E6<

EA:

0

 &

''

+/(+(L+

分割

"<

C

"<

"

<

"<

C

 &

"<

C

"<

P

"

<

"<

C

 &

''

+/(*

整列 及び その関連演算

''

+/(*(L

整列

E6<

E6

<

E6<

 &

E6<

7

E6

<

E6<

7

 &

E6<

PE

6

<

E6<

 &

E6<

7

PE

6

<

E6<

7

 &

E6<

PE

6

<

E6<

E6<

 &

E6<

7

PE

6

<

E6<

E6<

7

 &

<< 

E6<

E6<

PP

<

<

<<

E6<

E6<

P &

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

*

<< 

E6<

7

E6<

PP

<

<

<<

E6<

E6<

7

 &

E6<

PE

6

<

E6<

E6<

 &

E6<

7

PE

6

<

E6<

E6<

7

 &

''

+/(*(*

二分探索

9< 

9<

P9

<

9<

0

 &

9< 

7

9<

P9

<

9<

0

7

 &

9< 

9<

P9

<

9<

0

 &

9< 

7

9<

P9

<

9<

0

7

 &

9< 

9<

9<

P9

<

9<

0

 &

9< 

7

9<

9<

P9

<

9<

0

7

 &

9< 

P9

<

9<

0

 &

9< 

7

P9

<

9<

0

7

 &

''

+/(*(M

併合

<<L 

<<+ 

B<

B<

<<

L

<<L

<<+

<<+

B<

 &

<<L 

<<+ 

B< 

7

B<

<<

L

<<L

<<+

<<+

B<

7

 &

"<

P"

<

"<

"<

 &

"<

7

P"

<

"<

"<

7

 &

''

+/(*(/

集合演算

<<L 

<<+

<<

L

<<L

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

<<+

<<+

+ &

<<L 

<<+ 

7

<<L

<<L

<<+

<<+

7

 &

<<L 

<<+ 

B<

B<

P<

<

L

<<L

<<+

<<+

B<

 &

<<L 

<<+ 

B< 

7

B<

P<

<

L

<<L

<<+

<<+

B<

7

 &

<<L 

<<+ 

B<

B<

P

<<L

<<L

<<+

<<+

B<

 &

<<L 

<<+ 

B< 

7

B<

P

<<L

<<L

<<+

<<+

B<

7

 &

<<L 

<<+ 

B<

B<

P

<<L

<<L

<<+

<<+

B<

 &

<<L 

<<+ 

B< 

7

B<

P

<<L

<<L

<<+

<<+

B<

7

 &

<<L 

<<+ 

B<

B<

PP

<

<

L

<<L

<<+

<<+

B<

 &

<<L 

<<+ 

B< 

7

B<

PP

<

<

L

<<L

<<+

<<+

B<

7

 &

''

+/(*(-

ヒープ 演算

E6<

PE

6

<

E6<

 &

E6<

7

PE

6

<

E6<

7

 &

E6<

PE

6

<

E6<

 &

E6<

7

PE

6

<

E6<

7

 &

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

E6<

PE

6

<

E6<

 &

E6<

7

PE

6

<

E6<

7

 &

E6<

PE

6

<

E6<

 &

E6<

7

PE

6

<

E6<

7

 &

''

+/(*(,

最小 及び 最大

0

0

0

 &

7

0

0

0

7

 &

0

0

0

 &

7

0

0

0

7

 &

9<

9<

P

9<

9<

 &

9< 

7

9<

P9

<

9<

7

 &

9<

9<

P

9<

9<

 &

9< 

7

9<

P9

<

9<

7

 &

<<L 

<<+

P

<<L

<<L

<<+

<<+

+ &

<<L 

<<+ 

7

P

<<L

<<L

<<+

<<+

7

 &

''

+/(*(O

順列

"<

P

"

<

"<

 &

"<

7

P

"

<

"<

7

 &

"<

P

"

<

"<

 &

"<

7

P

"

<

"<

7

 &

R

すべてのアルゴ リズムは,データ構造の特定の実装から分離されており,反復子の型で区分される。このことから,

プログラム中で定義した勝手なデータ構造が,アルゴ リズムに対する前提を満たす反復子の型をもっていれば ,その

アルゴ リズムを使うことができる。

#

では,テンプレート 仮引数の名前を使って,型に関する要件を示す。アルゴ リズムのテンプレート 仮引数が

<<

<<L

又は

<<+

の場合,そのテンプレート 実引数は,入力反復子の要件

)を満たさなければならない。アルゴ リズムのテンプレート仮引数が

B<

B<L

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

又は

B<+

の場合,そのテンプレート実引数は,出力反復子の要件(

)を満たさなければならな

い。アルゴ リズムのテンプレート仮引数が

9<

9<L

又は

9<

+

の場合,

そのテンプレート実引数は,前進反復子の要件(

)を満たさなければならない。アルゴ リズムのテンプレート

仮引数が

"<

"<

L

又は

"<

+

の場合,そのテン

プレート実引数は,両進反復子の要件(

)を満たさなければならない。アルゴ リズムのテンプレート仮引数が

E6<

E6<

L

又は

E6<

+

の場合,そのテンプレート実引

数は,ランダムアクセス反復子の要件(

#

)を満たさなければならない。

アルゴ リズムの

効果

の中で,実引数として渡された反復子によって指される値が変更されると規定する場合,その

アルゴ リズムは,型に関して追加要件をもつ。すなわち,その実引数の型は,変更可能な反復子の要件を満たしてい

なければならない。

参考

出力反復子は常に変更可能でなければならないので,この要件は,

B<

B<L

又は

B<+

として宣言された実引数には影響しない。

アルゴ リズムによっては

,

複写版と非複写版との両方が提供される。

0

1

(

"

に複写版が提供される場合,そ

のアルゴ リズムの名前は,

0

1

(

"

とする。述語を使うアルゴ リズムは,接尾辞

をもつ(これは,接尾

の後に付ける。)

仮引数型の

C

は,アルゴ リズムが次のような関数オブジェクトを実引数としてとる場合に使用される。そ

の関数オブジェクトは,対応する反復子の参照をはずした結果に適用されたとき,

かど うか試験可能な値を返

す。すなわち,アルゴ リズムが

C

を実引数としてとり,

をその反復子実引数とする場合,

!

  (((

というプログラム構文の中でそのアルゴ リズムは,正し く動くはずとする。関数オブジェク

は, 参照をはずされた反復子を通して非定数の関数を適用してはならない。この関数オブジェクトは,関数

へのポインタであっても,関数呼出し演算子をもつ型のオブジェクトであってもよい。

仮引数型の

"C

は, アルゴ リズムが次のような関数オブジェクトを実引数としてとる場合に使用

する。その関数オブジェクトは,二つの対応する反復子の参照をはずした結果に適用されたとき,又は

が呼出し

情報の一部であるとき,反復子 及び 型

に適用される。その結果は,

かど うか試験可能な値を返す。すなわ

ち,アルゴ リズムが

"C

を実引数としてとり,

L

及び

+

を反復子実引数とした場

合,

!L 

!+  (((

という構文の中で,そのアルゴ リズムが正しく動くはずとする。

"C

は,常に,最初の反復子型を第

実引数としてとる。すなわち,

が呼出し情報の一部であ

る場合,

!L 

  (((

という構成で正しく動くはずとする。

は, 参照

をはずされた反復子を通して非定数の関数を適用してはならない。

アルゴ リズムの記述において,演算子

)

及び

V

は,それらを定義する必要のない反復子カテゴ リのいくつかに用

いられる。この場合の

)

の意味は,次と同じとする。

Q

5

%

&

 &

&

R

V

の意味は,次と同じとする。

 &

#

更新を伴わない列演算

#

/

==(

>0

>

 ==

(

==

(

>

効果  

を,

から始めて

まで進めていき,区間

7

内の各反復子の参照をはずした結果

に適用する。

返却値  

計算量  

の適用がちょうど

回生じる。

参考

が結果を返しても,その結果は無視される。

複写版も提供するかど うかは,通常,計算量に基づいて決まる。演算を行うコストが,コピーのコストより大きい場合,複写版は含ま

れない。例えば,

は,含まれない。整列演算のコストは,はるかに重大であり,利用者は,

の後で

したほうがよい。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

#

/

==(

0

==

 ==

(

==

(

)

!

/

==(

80

==

 ==

(

==

(

8

要件  

は,

87

)とする。

返却値  

区間

7

にある反復子

であって,対応条件

!

%%

及び

[%

を満たす

最初の反復子を返す。そのような反復子が見つからないときは,

を返す。

計算量  

対応述語を,高々

回適用する。

#

/

>=(

>=10

>=

 >=

(

>=

(

>=1

1(

>=1

1

/

>=(

>=1(

F80

>=

 >=

(

>=

(

>=1

1(

>=1

1(

F8

効果  

列の中で等価な値の部分列を見つける。

返却値  

区間

7L

L

+

+

にある最後の反復子

を返す。ただし,

+

+

る任意の非負整数

について,対応条件

!

)

%%

!+

)

及び

!

)

  !+

)

  

[%

が成り立つとする。そのような反復子が見つからないときは,

L

を返す。

計算量  

対応述語を,高々

+

+

L

L

+

+

#

回適用する。

#

/

>=(

>=10

>=

 >=  

(

>=

(

>=1

1(

>=1

1

/

>=(

>=1(

F80

>=

 >=  

(

>=

(

>=1

1(

>=1

1(

F8

効果  

値集合の一つに合致する要素を見つける。

返却値  

区間

7L

L

にある最初の反復子

を返す。ただし ,区間

7+

+

のある反復子

に対

して,条件

!

%%

!

及び

! ! 

[%

が成り立つとする。そのような反復子が見つからないときは,

を返す。

計算量  

対応述語を,高々

L

L

+

+

回適用する。

##

/

>=0

>=

D >= 

(

>=

/

>=(

F80

>=

D >= 

(

>=

(

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

F8

返却値  

及び

#

の両方が区間

7

にある最初の反復子

を返す。ただし ,対応条件

!

%%

!

)

及び

!

)

L  

[%

が成り立つとする。そのような反復子が見つからないときは,

を返す。

計算量  

対応述語を,ちょうど

回適用する。

#(

/

==(

0

/== 0 &&    

 ==

(

==

(

)

!

/

==(

80

/== 0 &&    

 ==

(

==

(

8

要件  

は,

87

)とする。

効果  

区間

7

にある反復子の個数を返す。ただし ,対応条件

!

%%

及び

[%

が成り立つとする。

計算量  

対応述語を,ちょうど

回適用する。

#)

/

==(

==10

/==(

==10

 ==

(

==

(

==1

1

/

==(

==1(

F80

/==(

==10

 ==

(

==

(

==1

1(

F8

返却値  

区間

7L

L

にある最初の反復子

及び

%%

+

)

V

からなる反復子の対

を返す。ただし,対応条件

[!

%%

!+

)

V

L   

及び

!+

)

V

L   

%%

が成り立つとする。そのような反復子

が見つからない場合,反復子の対

+

)

L

V

を返す。

計算量  

対応述語を,高々

L

L

回適用する。

#

/

==(

==10

 ==

(

==

(

==1

1

/

==(

==1(

F80

 ==

(

==

(

==1

1(

F8

返却値  

区間

7L

L

にあるすべての反復子

について,対応条件

!

%%

!+

)

V

L  

及び

!+

)

V

L   

[%

が成り立つとき,

を返す。そうでないとき,

返す。

計算量  

対応述語を,高々

L

L

回適用する。

#*

/

>=(

>=10

>=

 >=

(

>=

(

>=1

1(

>=1

1

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

#

/

>=(

>=1(

F80

>=

 >=

(

>=

(

>=1

1(

>=1

1(

F8

効果  

列の中で等価な値の部分列を見つける。

返却値  

区間

7L

L

+

+

にある最初の反復子

を返す。ただし,

+

+

より小

さい任意の非負整数

について,対応条件

!

)

%%

!+

)

及び

!

)

  

!+

)

  

[%

が成り立つとする。そのような反復子が見つからないときは,

を返す。

計算量  

対応述語を,高々

L

L

+

+

回適用する。

/

>=(

<'(

0

>=

 >=

(

>=

(

<'

(

)

!

/

>=(

<'(

(

F80

>=

 >=

(

>=

(

<'

(

)

!(

F8

要件  

は,

87

)とし ,型

F$

は,汎整数型(

)

及び

参照)に変換可能と

する。

効果  

列の中で等価な値の部分列を見つける。

返却値  

区間

7

にある最初の反復子

を返す。ただし ,

より小さい任意の非負整数

ついて,対応条件

!

)

%%

及び

!

)

  

[%

が成り立つとする。そのような反

復子が見つからないときは,

を返す。

計算量  

対応述語を,高々

L

L

回適用する。

#

更新を伴う列演算

#

/

==(

9=0

9=

 ==

(

==

(

9=

効果  

区間

7

にある要素を,

から始めて

まで,区間

7

#

コピーする。

なるすべての非負整数

について,

!

)

%

!

)

を実行する。

返却値  

)

V

要件  

は,区間

7

にあってはならない。

計算量  

ちょうど

回の代入を行う。

/

F=(

F=10

F=1

4 F =  

(

F=

(

F=1

効果  

区間

7

にある要素を,

から始めて

まで,区間

7

にコピーする

なるすべての正整数

について,

!

V

%

!

V

を実行

する。

要件  

が区間

7

にあってはならない。

が区間

8$

%

にある場合は,

の代わりに

.C&

.00.C&

を使う

のがよい。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

(

返却値  

V

V

計算量  

ちょうど

回の代入を行う。

#

+

/

0

!

 )

(

)

要件  

は,

77

の要件(

及び

6

の要件(

)を満たす。

効果  

箇所に格納されている値を交換する。

/

>=(

>=10

>=1

 >= 

(

>=

(

>=1

1

効果  

L

L

であるすべての非負整数

について,

!L

)

  

!+

)

  

を実

行する。

要件  

区間

7L

L

7+

+

#

L

L

とが重なっていてはならない。

返却値  

+

)

L

V

計算量  

ちょうど

L

L

回の交換を行う。

/

>=(

>=10

!

 >= 

(

>=1

効果  

二つの反復子,

及び

によって指される値を交換する。

#

"

/

==(

9=(

290

9=

 ==

(

==

(

9=

(

29

/

==(

==1(

9=(

F90

9=

 ==

(

==

(

==1

1(

9=

(

F9

効果  

区間

7

 #

L

L

にあるすべての反復子

を通じて,

!L

)

V

  

又は

!L

)

V

   

!+

)

V

   

に等価な新しい対応する値を代入す

る。

要件  

及び

には,副作用があってはならない。

返却値  

)

L

V

計算量  

ちょうど

L

L

回,

又は

を適用する。

参考

は,単項変換の場合は,

に等しくてもよく,二項変換の場合は,

L

又は

+

等しくてもよい。

#

/

>=(

0

!

 >=

(

>=

(

)

!(

)

!

/

>=(

8(

0

!

 >= 

(

>=

(

8

(

)

!

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

)

要件  

は,

6

)とする。

( 更に,

については,

87

)と

する。)

効果  

区間

7

にある反復子

によって参照される要素に,次の対応条件

!

%%

及び

[%

が成り立つ場合に限って

を代入する。

計算量  

対応述語を,ちょうど

回適用する。

/

==(

9=(

0

9=

 == 

(

==

(

9=

(

)

!(

)

!

/

=(

9=(

8(

0

9=

 =

(

=

(

9=

(

8

(

)

!

要件  

は,

6

)とする。

( 更に,

については,

87

)とす

る。)区間

7

7

#

とが重なっていてはならない。

効果  

区間

7

#

にあるすべての反復子

に,対応条件

!

)

V

  

%%

及び

!

)

V

   

[%

が成り立つかど うかに応じて,

又は

!

)

V

  

を代入する。

返却値  

)

V

計算量  

対応述語を,ちょうど

回適用する。

##

$  

/

>=(

0

!

 >=

(

>=

(

)

!

/

9=(

<'(

0

!

 9=

(

<'

(

)

!

要件  

6

)とし ,

F$

は汎整数型に変換可能(

)

及び

参照)とする。

効果  

区間

7

又は

7

#

にあるすべての反復子を通して値を代入する。

計算量  

ちょうど

回 又は

回の代入を行う。

#(

/

>=(

K0

!

 >=

(

>=

(

K

/

9=(

<'(

K0

!

 9=

(

<'

(

K

効果  

関数オブジェクト

を呼び出し ,区間

7

又は

7

#

にあるすべての反復子を通

して,

の返却値を代入する。

要件  

は実引数なしとし,

F$

は汎整数型に変換可能(

)

及び

参照)とする。

計算量  

ちょうど

回 又は

回の

の呼出し 及び 代入を行う。

#)

'

/

>=(

0

>=

! >=

(

>=

(

)

!

/

>=(

80

>=

! >=

(

>=

(

8

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

要件  

は,

87

)とする。

効果  

区間

7

の中のすべての反復子

に対して,対応条件

!

%%

及び

[%

成り立つとき,

によって参照されている要素を削除する。

返却値  

結果の区間の末尾。

参考

安定性  

削除されない要素の相対順序は,もとの区間での相対順序と同じとする。

計算量  

対応述語を,ちょうど

回適用する。

/

==(

9=(

0

9=

! == 

(

==

(

9=

(

)

!

/

==(

9=(

80

9=

! == 

(

==

(

9=

(

8

要件  

は,

87

)とする。区間

7

7

#

とが重複していてはならない。

効果  

区間

7

にあるすべての反復子

によって参照される要素を,対応条件

!

%%

及び

[%

が成り立つ場合を除いて,コピーする。

返却値  

結果の区間の末尾。

計算量  

対応述語を,ちょうど

回適用する。

参考

安定性  

結果の区間の要素の相対順序は,もとの区間での相対順序と変わることがない。

#

2

/

>=0

>=

 >=

(

>=

/

>=(

F80

>=

 >=

(

>=

(

F8

効果  

区間

7

にあるすべての等値グループから,各グループの先頭以外のすべての要素を削除する。こ

こで,等値グループとは,等しい値が連続する部分,すなわち,区間内の反復子

に対して,条件

!

%%

!

V

又は

!

V

L  

[%

が成り立つ最長の部分をいう。

返却値  

結果の区間の末尾。

計算量  

区間

V

が空でない場合,対応述語を,ちょうど

回適用する。そうでな

い場合,対応述語を一切適用しない。

/

==(

9=0

9=

 == 

(

==

(

9=

/

==(

9=(

F80

9=

 == 

(

==

(

9=

(

F8

要件  

区間

7

7

#

とが重複していてはならない。

効果  

区間

7

にあるすべての等値グループから,各グループ の先頭要素だけをコピーする。ここで,

等値グループとは,等しい値が連続する部分,すなわち,区間内の反復子

に対して,条件

!

%%

!

V

又は

!

V

L  

[%

が成り立つ最長の部分をいう。

返却値  

結果の区間の末尾。

計算量  

対応述語を,ちょうど

回適用する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

*

#*

'

/

F=0

!

! F= 

(

F=

効果  

2

なるすべての非負整数

について,反復子の対

)

及び

V

V

L

を行う。

計算量  

ちょうど

2

回の交換を行う。

/

F=(

9=0

9=

! F =  

(

F=

(

9=

効果  

区間

7

を区間

7

#

にコピーする。すなわち,

V

なる任意の非負整数

に対して,代入

!

)

V

V

%

!

)

を行う。

要件  

区間

7

7

#

とが重なっていてはならない。

返却値  

)

V

計算量  

ちょうど

回の代入を行う。

#

/

>=0

!

 >=

(

>=

(

>=

効果  

なる各非負整数

について,

)

の位置にある要素を

)

)

V

  

U

V

の位置に移す。

参考

これは,左回転となる。

要件  

区間

7

及び

7

は,妥当な区間とする。

計算量  

高々

回の交換を行う。

/

>=(

9=0

9=

 >= 

(

>=

(

>=

(

9=

効果  

区間

7

を区間

7

#

にコピーする。すなわち,

V

なる各非負整数

に対して,代入

!

)

%

!

)

)

V

  

U

V  

行う。

返却値  

)

V

要件  

区間

7

7

#

とが重なっていてはならない。

計算量  

ちょうど

回の代入を行う。

#

/

;:=0

!

 ;: =  

(

;:=

/

;:=(

;K0

!

 ;: =  

(

;:=

(

;K)

効果  

区間

7

にある要素を一様分布にシャッフルする。

計算量  

ちょうど

回の交換を行う。

参考

は,特定の乱数発生関数オブジェクト

を実引数にとってよい。ただし ,型

E6

<

3

3

の正の値の実引数

に対して,

は,

E6

<

3

3

に変換可能な型をもち,値域

7

からランダムに選ばれた値を返す関数とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

/

F=(

80

F=

 F=  

(

F=

(

8

効果  

区間

7

にある,

を満たすすべての要素を,

を満たさないすべての要素の前におく。

返却値  

区間

7

にある任意の反復子

に対して,

[%

となり,かつ,区間

7

にあ

る任意の反復子

に対して,

%%

となるような反復子

を返す。

計算量  

高々

2

回の交換を行う。述語

を,ちょうど

回適用する。

/

F=(

80

F=

 F  =  

(

F=

(

8

効果  

区間

7

にある,

を満たすすべての要素を,

を満たさないすべての要素の前におく。

返却値  

区間

7

にある任意の反復子

に対して,

[%

となり,かつ,区間

7

にあ

る任意の反復子

に対して,

%%

となるような反復子

を返す。両方のグループで,要素の相対順

序は保存される。

計算量  

高々

回の交換を行う。ただし,メモリが十分にある場合,線形ですむ。

述語

を,ちょうど

回適用する。

#

整列 及び それに関連した演算

#

のすべての演算は,型

7

の関数オブジェクトを実引数にとるも

のと,

を使うものとの二つの版をもつ。

7

は,第

実引数が第

実引数より小さいとき

を,そうでないとき,

を返す。順序関係を仮定

したアルゴ リズムに対しては,

7

型の

が常に使われる。

は,参照をはずされた反復子を通して非定

数の関数を適用することがないとする。

7

を実引数にとるすべてのアルゴ リズムについては,

を代用する版がある。すなわち,

[%

の代わりに,

!

!

[%

を使う。アルゴ リズムが正しく働くには,

が値の純弱順序を与

えなければならない。

:

;

は,反反射律( すべての

について,

)を要件とすることを示す。語

:

;

は,全順序ほど 強

くないが,半順序よりも強いという要件を示す。すなわち,

00

とする

とき,次の推移関係を要件とすることを示す。

00

ならば

である。

00

ならば

である。

参考

この条件の下で,次が示される。

は,同値関係である。

は,

によって決定される同値類上の関係を導く。

この導かれた関係は,純全順序となる。

列が,比較子

に関して整列しているとは,列を指す任意の反復子

及び 任意の非負整数

に対して,

)

が列の要素を指す妥当な反復子であるとき,

!

)

  

%%

が成り立つことをいう。

順序関係を扱う関数の記述では,安定性のような概念を記述するのに同値の概念を用いる。ここでいう同値は,必

ずしも

%%

である必要はなく,純弱順序から導かれる同値関係でよい。すなわち,

要素

が同値であ

る必要十分条件は,

[

00

[

とする。

#

整列

#

/

;:=0

!

 ;:=

(

;:=

/

;:=(

#0

!

 ;:=

(

;:=

(

#

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

効果  

区間

7

にある要素を整列する。

計算量  

平均的にほぼ

(ここで,

Q

とする。)回の比較を行う。

#

/

;:=0

!

 ;:=  

(

;:=

/

;:=(

#0

!

 ;:=  

(

;:=

(

#

効果  

区間

7

にある要素を整列する。

計算量  

高々

(ここで,

Q

とする。)回の比較を行う。メモリが十分ある場合は,

となる。

参考

安定性  

同値な要素の相対順序は,保存される。

#

/

;:=0

!

 ;:=  

(

;:=

(

;:=

/

;:=(

#0

!

 ;: = 

(

;:=

(

;:=

(

#

効果  

区間

7

を整列した場合の最初の

個の要素を区間

7

におく。区間

7

にある残りの要素の並ぶ順序は,未規定とする。

計算量  

ほぼ

回の比較を行う。

#

/

==(

;:=0

;:=

 ==  

(

==

(

;:=

(

;:=

/

==(

;:=(

#0

;:=

 ==  

(

==

(

;:=

(

;:=

(

#

効果  

最初の

個の要素を整列し ,それらの要素を区間

7

#

におく。

返却値  

又は

)

V

の小さいほうを返す。

計算量  

ほぼ

回の比較を行う。

#

/

;:=0

!

 ;:=  

(

;:=

(

;:=

/

;:=(

#0

最悪時の振る舞いが重要な場合は,

.

)又は

)を使うとよい。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

!

 ;:=  

(

;:=

(

;:=

(

#

効果  

の実行後,

で指される位置にある要素は,区間全体を整列したときにその位置にある要素と

なる。さらに,区間

7

にある任意の反復子

及び 区間

7

にある任意の反復子

に対して,条

[!

又は

%%

が成り立つ。

計算量  

平均で線形とする。

#

二分探索

#

のすべてのアルゴ リズムは,二分探索の各種の版である。探索される列は,明示的 又は

暗黙的な比較関数によって整列されていると仮定する。これらのアルゴ リズムは,ランダムアクセス反復子以外の反

復子に対しては,比較回数最小となる。その比較回数は,すべての型の反復子において,対数となる。これらのアル

ゴ リズムは,ランダムアクセス反復子に特に適している。ランダムアクセス反復子に対しては,データ構造の対数回

のステップを実行する。非ランダムアクセス反復子では,線形回のステップを実行する。

#

/

>=(

0

>=

 >= 

(

>=

(

)

!

/

>=(

(

#0

>=

 >= 

(

>=

(

)

!(

#

要件  

は,

?7

とする)

効果  

順序を乱さずに

を挿入できる最初の位置を見つける。

返却値  

区間

7

にある反復子

であって,区間

7

にある任意の反復子

について,対応条件

!

又は

[%

が成り立つ最大の

を返す。

計算量  

高々

#

回の比較を行う。

#

/

>=(

0

>=

 >= 

(

>=

(

)

!

/

>=(

(

#0

>=

 >= 

(

>=

(

)

!(

#

要件  

は,

?7

効果  

順序を乱さずに

を挿入できる最大の位置を見つける。

返却値  

区間

7

にある反復子

であって,区間

7

にある任意の反復子

について,対応条件

[

又は

%%

が成り立つ最大の

を返す。

計算量  

高々

#

回の比較を行う。

#

/

>=(

0

/>=(

>=0

 >= 

(

>=

(

)

!

/

>=(

(

#0

/>=(

>=0

 >= 

(

>=

(

)

!(

#

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

要件  

は,

?7

)とする。

効果  

部分区間

7,

=

であって,その中の任意の反復子

の位置に順序を乱さずに

が挿入できる最大のものを

見つける。ここで,

の位置に順序を乱さずに

が挿入できるとは,対応条件

[!

00

[

又は

%%

00

%%

が成り立つことをいう。

計算量  

高々

#

回の比較を行う。

#

/

>=(

0

 >= 

(

>=

(

)

!

/

>=(

(

#0

 >= 

(

>=

(

)

!(

#

要件  

は,

?7

)とする。

返却値  

区間

7

にある反復子

であって,対応条件

[!

00

[

又は

%%

00

%%

を満たす反復子

が存在するとき,

を返す。

計算量  

高々

#

回の比較を行う。

#

/

==(

==1(

9=0

9=

 ==

(

==

(

==1

1(

==1

1(

9=

/

==(

==1(

9=(

#0

9=

 ==

(

==

(

==1

1(

==1

1(

9=

(

#

効果  

二つの整列されている区間

7L

L

及び

7+

+

を,区間

7

#

L

L

#

+

+

に併合する。

要件  

結果の区間は,元の区間のど ちらとも重複していてはならない。結果の並びは,

で定義された順序に従っ

て非減少順に整列される。すなわち,

7

にある先頭を除いたすべての反復子

について,条件

!

!

V

又は

!

V

L  

が偽となる。

返却値  

)

L

V

)

+

V

計算量  

高々

L

L

#

+

+

回の比較を行う。

参考

安定性  

二つの区間にある同値な要素については,第

区間にある要素が常に第

区間にある要素に先

行する。

/

F=0

!

 F =  

(

F=

(

F=

/

F=(

#0

!

 F =  

(

F=

(

F=

(

#

効果  

二つの引き続く整列されている区間

7

及び

7

を併合し,併合結果を区間

7

におく。結果の区間は,非減少順に並ぶ。すなわち,区間

7

の先頭以外のすべての反復子

につ

いて,条件

!

!

VL

又は

!

V

L  

が偽となる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

計算量  

メモリが十分にある場合,

回の比較を行う。メモリが十分にない場合,計算量

(ここで,

Q

とする。)のアルゴ リズムが使われる。

参考

安定性  

二つの区間にある同値な要素については,第

区間にある要素が常に第

区間にある要素に先

行する。

##

整列構造上の集合演算

##

では,整列した構造を対象とした基本的な集合演算のすべてを定義する。

これらの演算は,同値な要素の複数コピーを含む

)に対しても動作する。それには,集合演算

の意味を

に対し て一般化する。すなわち,

が 各要素についての最大の出現個数も一緒に返し ,

が各要素についての最小の出現個数も一緒に返すことなどによって一般化する。

##

/

==(

==10

 ==

(

==

(

==1

1(

==1

1

/

==(

==1(

#0

 ==

(

==

(

==1

1(

==1

1(

#

返却値  

区間

7+

+

にあるすべての要素が区間

7L

L

に含まれるとき,

を返す。そうで

ないとき,

を返す。

計算量  

高々

L

L

#

+

+

回の比較を行う。

##

/

==(

==1(

9=0

9=

 ==

(

==

(

==1

1(

==1

1(

9=

/

==(

==1(

9=(

#0

9=

 ==

(

==

(

==1

1(

==1

1(

9=

(

#

二つの区間から要素の整列済みの和集合を構築する。すなわち,一つの区間 又は 両方の区間にある要素の集合を

構築する。

要件  

結果の区間は,元の二つの区間のど ちらとも重なっていてはならない。

返却値  

構築された区間の末尾。

計算量  

高々

L

L

#

+

+

回の比較を行う。

参考

安定性  

要素が両方の区間にある場合,第

区間の要素をコピーする。

##

/

==(

==1(

9=0

9=

 ==  

(

==

(

==1

1(

==1

1(

9=

/

==(

==1(

9=(

#0

9=

 ==  

(

==

(

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

#

==1

1(

==1

1(

9=

(

#

二つの区間から要素の整列済みの積集合を構築する。すなわち,両方の区間にある要素の集合を構築する。

要件  

結果の区間は,元の二つの区間のど ちらとも重なっていてはならない。

返却値  

構築された区間の末尾。

計算量  

高々

L

L

#

+

+

回の比較を行う。

参考

安定性  

要素が両方の区間に共通してある場合,第

区間のものがコピーされる。

##

/

==(

==1(

9=0

9=

 ==  

(

==

(

==1

1(

==1

1(

9=

/

==(

==1(

9=(

#0

9=

 ==  

(

==

(

==1

1(

==1

1(

9=

(

#

効果  

区間

7L

L

に存在して区間

7+

+

に存在しない要素を,

から始まる区間にコ

ピーする。構築された区間の要素は,整列する。

要件  

結果の区間は,元の二つの区間のど ちらとも重なっていてはならない。

返却値  

構築された区間の末尾。

計算量  

高々

L

L

#

+

+

回の比較を行う。

###

/

==(

==1(

9=0

9=

  = =  

(

==

(

==1

1(

==1

1(

9=

/

==(

==1(

9=(

#0

9=

  = =  

(

==

(

==1

1(

==1

1(

9=

(

#

効果  

区間

7L

L

に存在して区間

7+

+

に存在しない要素,及び 区間

7+

+

に存

在して区間

7L

L

に存在しない要素を,

から始まる区間にコピーする。構築された区間の要素は

整列する。

要件  

結果の区間は,元の二つの区間のど ちらとも重なっていてはならない。

返却値  

構築された区間の末尾。

計算量  

高々

L

L

#

+

+

回の比較を行う。

#(

ヒープ演算

ヒープは,二つのランダムアクセス反復子

との間の区間

7

にある要素を特定の方式

で組織したものをいう。ヒープは,次の二つの主要特性をもつ。

!

より大きな要素は,その区間にない。

%

!

を使って取り除くこと,又は

を使って新しい要素を追加することが,い

ずれも

3

の時間で行える。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

(

この特性から,ヒープは,優先度キューとして使うことができる。

は区間をヒープに変換し ,

はヒープを整列された列に変換する。

#(

/

;:=0

!

 ;:=  

(

;:=

/

;:=(

#0

!

 ;:=  

(

;:=

(

#

要件  

区間

7

は,正しいヒープでなければならない。

効果  

位置

にある値を移動して,区間

7

をヒープにする。

計算量  

高々

回の比較を行う。

#(

/

;:=0

!

 ;:= 

(

;:=

/

;:=(

#0

!

 ;:= 

(

;:=

(

#

要件  

区間

7

は,正しいヒープでなければならない。

効果  

位置

にある値を位置

にある値と交換し ,

7

をヒープにする。

計算量  

高々

回の比較を行う。

#(

/

;:=0

!

4 ;:=  

(

;:=

/

;:=(

#0

!

4 ;:=  

(

;:=

(

#

効果  

区間

7

からヒープを構築する。

計算量  

高々

回の比較を行う。

#(

/

;:=0

!

 ;:=  

(

;:=

/

;:=(

#0

!

 ;:=  

(

;:=

(

#

効果  

ヒープ

7

の要素を整列する。

計算量  

高々

回の比較を行う。

(ここで,

Q

とする。)

参考

安定性  

安定でない。

#)

最小 及び 最大

/

0

)

)

(

)

/

(

#0

)

)

(

)

(

#

要件  

は,

?7

)及び

77

)とする。

返却値  

最小値。

参考

実引数が同値の場合,第

実引数を返す。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

)

/

0

)

)

(

)

/

(

#0

)

)

(

)

(

#

要件  

は,

?7

)及び

77

)とする。

返却値  

最大値。

参考

実引数が同値の場合,第

実引数を返す。

/

>=0

>=

 >= 

(

>=

/

>=(

#0

>=

 >= 

(

>=

(

#

返却値  

区間

7

にある反復子

であって,区間

7

にある任意の反復子

について対応条件

[!

又は

%%

が成り立つ最初の

を返す。

%%

の場合,

を返す。

計算量  

ちょうど

?

回,対応比較を適用する。

/

>=0

>=

 >= 

(

>=

/

>=(

#0

>=

 >= 

(

>=

(

#

返却値  

区間

7

にある最初の反復子

であって,区間

7

にある任意の反復子

について対

応条件

[!

又は

%%

が成り立つ最初の

を返す。

%%

の場合,

を返す。

計算量  

ちょうど

?

回,対応比較を適用する。

#

辞書順比較

/

==(

==10

 =  =  

(

==

(

==1

1(

==1

1

/

==(

==1(

#0

 =  =  

(

==

(

==1

1(

==1

1(

#

返却値  

区間

7L

L

で定義される要素の列が,区間

7+

+

で定義される要素の列よりも辞書順

で小さい場合,

を返す。そうでない場合,

を返す。

計算量  

高々

L

L

+

+

回,対応比較を適用する。

参考

二つの列が同じ個数の要素をもち,対応要素が同値の場合,ど ちらの列も辞書順で他方の列より小さく

はない。一方の列が他方の列の接頭語になっている場合,短いほうの列は,長いほうの列よりも辞書順で

小さい。そうでない場合,列の辞書順比較は,等価でない要素の最初の対応する対の比較と同じ結果を与

える。

&

L

[%

L

00

+

[%

+

&

))L 

))+ 

Q

!L

!+ 

&

!+

!L 

&

R

L

%%

L

00

+

[%

+&

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

#*

順列

/

F=0

 F  =  

(

F=

/

F=(

#0

 F  =  

(

F=

(

#

効果  

区間

7

で定義される列を受け取り,それを次の順列に変換する。次の順列とは,すべての順列の

集合を

又は

に関して辞書順に整列したと仮定して直後の位置に来るものをいう。そのような順列が

存在するとき,

を返す。そうでないとき,列を最小順列( すなわち,昇順に整列した列)に変換し ,

返す。

計算量  

高々

2

回の交換を行う。

/

F=0

! F  =  

(

F=

/

F=(

#0

! F  =  

(

F=

(

#

効果  

区間

7

で定義される列を受け取り,それを前の順列に変換する。前の順列とは,すべての順列の

集合を

又は

に関して辞書順に整列したと仮定して直前の位置に来るものをいう。

返却値  

そのような順列が存在するとき,

を返す。そうでないとき,列を最大順列(すなわち,降順に整列した

列)に変換し ,

を返す。

計算量  

高々

2

回の交換を行う。

#

ライブラリのアルゴリズム

ヘッダ

の一部分を

)

に示す。

)

ヘッダ

一覧

名前  

関数

次を除いて,内容は,標準

"

ライブラリヘッダ

(

と同じとする。

関数呼出し情報

$P 

$P 

!

!  &

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

Y7Y

!

!

!

$P

$P

!

!  &

Y7))Y

!

!

!

$P

$P

!

!  &

ど ちらも元の宣言と同じ振る舞いをもつ。

関数呼出し情報

$P 

$P 

!

!  &

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

Y7Y

!

$P

$P

!

!  &

Y7))Y

!

$P

$P

!

!  &

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

*

参考

関数実引数

は,例外を送出するかもしれないので,

及び

は,例外を伝

ぱすることが許されている。

)

参照  

6

)#

(

数値ライブラリ

この箇条では,準数値演算を実行するために

"##

プログラムで使う構成要素を規定する。

この箇条では,

)*

に示すとおり,複素数型,数値配列,一般化された数値アルゴ リズム 及び

H/

"

ライブラリ

に含まれる機能を規定する。

)*

 数値ライブラリの要約

箇条

ヘッダ  

(

要件

(

複素数

(

数値配列

(

一般化数値演算

(#

"

ライブラリ

(

数値型の要件

構成要素

及び

は,それらが格納し 操作する情報の型によって区分される。

"##

プログラムは,型

が次の要件を満たす場合にだけ,これらの構成要素を具現する。

は,抽象クラスでない( 純粋仮想メンバ関数をもたない。)

は,参照型でない。

は,

0

修飾されていない。

がクラスの場合,そのクラスは,公開の省略時コンストラクタをもつ。

がクラスの場合,そのクラスは,呼出し情報を

33

とする公開のコピーコンストラクタ

をもつ。

がクラスの場合,そのクラスは,公開のデストラクタをもつ。

がクラスの場合,そのクラスは,呼出し情報を

0

33%

又は

0

33%

とする公開の代入演算子をもつ。

がクラスの場合,その代入演算子,コピーコンストラクタ,省略時コンストラクタ 及び デストラクタ

は,次の意味で対応がとれていなければならない。

省略時コンストラクタを用いた素記憶域の初期化 及び それに続く代入の意味規則は,コピー

コンストラクタを用いた素記憶域の初期化と同等とする。

オブジェクトの解体 及び それに続くコピーコンストラクタを用いた素記憶域の初期化の意味

規則は,元のオブジェクトへの代入と同等とする。

参考

この規則は,初期化と代入が意味として違いがないことを述べている。これによって,処理

系には,配列を初期化する際にかなりの柔軟性が与えられる。

処理系は,演算子

を用いて記憶域を割り付け(これは,各要素に省略時

コンストラクタを呼び出すことを意味する。)た後で各要素にその値を代入するこ

とによって,

を初期化してもよい。そうではなくて,処理系は,素記憶

域を割り付けてから,コピーコンストラクタを用いて各要素を初期化してもよい。

初期化と代入の区別が重要なクラスの場合 又は 上で述べた要件のいずれかが満たされない場

合,プログラマは,そのクラスに対して

ではなく,

)を使うべきで

ある。

がクラスの場合,単項演算子

0

を多重定義しない。

のいずれかの演算が例外を送出する場合,その効果は未定義とする。

更に,

の個々の メンバ 又は それに関連する関数に対する追加の要件を

が満たす場合に限り,

のメンバ 及び それに関連する関数は具現することができ,適切に定義された動作をする。

を具現することは不当ではないが,

を演算対象とする

の具現は成功しない。クラス

には,順序付け演算子がないからである。

すなわち,

は値型でなければならない。この要件には組込み算術型,ポ インタ,ライブ ラリクラス

(

及び 値型に対する

の具現化を含む。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

(

複素数

ヘッダ

は,複素数を表現し 操作するクラステンプレート 及び 多数の関数を定義する。

又は

以外の型に対して,テンプレート

を具現した場合,その効果は,未規

定とする。

関数の結果が数学的に定義されない場合 又は その型が表現する値の範囲にない場合,その動作は未定義とする。

(

ヘッダ

一覧

Q

&

&

&

&

''

+-(+(-

演算子

)

0 &

)

0 &

)

0 &

V

0 &

V

0 &

V

0 &

!

0 &

!

0 &

!

0 &

'

0 &

'

0 &

'

0 &

)

0 &

V

0 &

%%

0 &

%%

0 &

%%

0 &

[%

0 &

[%

0 &

[%

0 &

P

0

P

0 &

P

0

P

0 &

''

+-(+(,

値に対する演算

0 &

0 &

0 &

0 &

0 &

0 &

0

0

%

. &

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

''

+-(+(N

超越関数

0 &

0 &

0 &

0 &

L.

0 &

 &

0 &

0 &

0 &

0 &

0 &

0 &

0 &

0 &

R

(

クラステンプレート

Q

Q

3

P&

0

%

  

0

%

  &

0 &

5

50 &

&

&

0

%

0 &

0

)%

0 &

0

V%

0 &

0

!%

0 &

0

'%

0 &

0

%

0 &

5

0

%

50 &

5

0

)%

50 &

5

0

V%

50 &

5

0

!%

50 &

5

0

'%

50 &

R&

R

クラス

は,複素数の直交成分である

及び

を保持するオブジェクトを規定する。

(

クラス

の特殊化

Q

3

P&

%

.(. 

%

.(. &

&

0 &

&

&

0

%

 &

0

)% 

&

0

V% 

&

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

0

!% 

&

0

'% 

&

0

%

0

 &

5

0

%

50 &

5

0

)%

50 &

5

0

V%

50 &

5

0

!%

50 &

5

0

'%

50 &

R&

Q

3

P&

%

.(. 

%

.(. &

0 &

0 &

&

&

0

%

 &

0

)%

&

0

V%

&

0

!%

&

0

'%

&

0

%

&

5

0

%

50 &

5

0

)%

50 &

5

0

V%

50 &

5

0

!%

50 &

5

0

'%

50 &

R&

Q

3

P&

%

.(.? 

%

.(.? &

0 &

&

&

&

0

%

0 &

0

%

 &

0

)%

 &

0

V%

 &

0

!%

 &

0

'%

 &

5

0

%

50 &

5

0

)%

50 &

5

0

V%

50 &

5

0

!%

50 &

5

0

'%

50 &

R&

(

クラステンプレート

のメンバ関数

/

0

)

,

 (

)

,

効果  

クラス

のオブジェクトを構築する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

#

事後条件  

%%

00

%%

(#

クラステンプレート

のメンバ演算子

/

0

/0)

%,

)

効果  

スカラ値

をクラス

の値

!

の実部に加え,その結果を

!

の実部に格納する。虚部は変更

しない。

返却値  

!

/

0

/0)

A,

)

効果  

スカラ値

をクラス

の値

!

の実部から減じ,その結果を

!

の実部に格納する。虚部は変

更しない。

返却値  

!

/

0

/0)

$,

)

効果  

スカラ値

をクラス

の値

!

に乗じ,その結果を

!

に格納する。

返却値  

!

/

0

/0)

E,

)

効果  

スカラ値

でクラス

の値

!

を割り,その結果を

!

に格納する。

返却値  

!

/

0

/0)

%,

/0)

効果  

クラス

の値

をクラス

の値

!

に加え,その結果を

!

に格納する。

返却値  

!

/

0

/0)

A,

/0)

効果  

クラス

の値

をクラス

の値

!

から減じ ,その結果を

!

に格納する。

返却値  

!

/

0

/0)

$,

/0)

効果  

クラス

の値

をクラス

の値

!

に乗じ,その結果を

!

に格納する。

返却値  

!

/

0

/0)

E,

/0)

効果  

クラス

の値

でクラス

の値

!

を割り,その結果を

!

に格納する。

返却値  

!

((

クラステンプレート

の非メンバ演算

/

0

/0

%

/0)

参考

単項演算子。

返却値  

/

0

/0

%

/0)

(

/0)

/

0

/0

%

/0)

(

)

/

0

/0

%

)

(

/0)

返却値  

)%

/

0

/0

A

/0)

参考

単項演算子。

返却値  

V

(  V

(  

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

#

/

0

/0

A

/0)

(

/0)

/

0

/0

A

/0)

(

)

/

0

/0

A

)

(

/0)

返却値  

V%

/

0

/0

$

/0)

(

/0)

/

0

/0

$

/0)

(

)

/

0

/0

$

)

(

/0)

返却値  

!%

/

0

/0

E

/0)

(

/0)

/

0

/0

E

/0)

(

)

/

0

/0

E

)

(

/0)

返却値  

'%

/

0

,,

/0)

(

/0)

/

0

,,

/0)

(

)

/

0

,,

)

(

/0)

返却値  

%%

00

%%

参考

が実引数の場合,虚部は

すなわち

.(.

とみなす。

/

0

-,

/0)

(

/0)

/

0

-,

/0)

(

)

/

0

-,

)

(

/0)

返却値  

[%

11

[%

/

(

(

0

/(

0)

00 /  (

0)

(

/0)

効果  

形式

又は

  

で複素数

を読み込む(

)(

参照)

。ここで,

の実部,

の虚部とする。

要件  

入力値は,型

に変換できなければならない。誤った入力があらわれた場合,

(33

が呼び出される(それが

33

)

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

返却値  

参考

この読込みは,より単純な読込みの連続として実行される。したがって,それぞれのより単純な読込み

で同じ空白類の読み飛ばしが指定される。

/

(

(

0

/(

0)

// /  (

0)

(

/0)

効果  

次のとおり実装されているかのように,複素数

をストリーム

に挿入する。

P

0

P

0

0

Q

P

&

((

  

&

((

 &

((

  

&

ZZ

Y Y

Z Z&

( &

R

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

##

()

クラステンプレート

の値に対する演算

/

0

/0)

返却値  

/

0

/0)

返却値  

/

0

/0)

返却値  

の絶対値。

/

0

/0)

返却値  

の偏角

+  

  

/

0

/0)

返却値  

の絶対値の

乗。

/

0

/0

D

/0)

返却値  

の共役複素数。

/

0

/0

)

(

)

,

返却値  

絶対値を

とし ,偏角を

とする複素数に対応するクラス

の値。

(

クラス

の超越関数

/

0

/0

/0)

返却値  

の複素余弦。

/

0

/0

/0)

返却値  

の複素双曲線余弦。

/

0

/0

/0)

返却値  

を底とする複素指数。

/

0

/0

/0)

参考

分枝は負の実軸に沿って切断する。

返却値  

の(

を底とする)複素自然対数であり,実軸に沿っては数学的には非有界で,虚軸に沿っては区間

7"

×

π

"

×π

9

の帯状領域内にあるもの。

が負の実数である場合,

  

はπとする。

/

0

/0

/0)

参考

分枝は負の実軸に沿って切断する。

返却値  

 'L. 

で定義される

の(

を底とする)複素常用対数。

/

0

/0

/0)

(

/

0

/0

/0)

(

/0)

/

0

/0

/0)

(

)

/

0

/0

)

(

/0)

参考

分枝は負の実軸に沿って切断する。

返却値  

!  

で定義される

の複素

乗。

. . 

の返却値は,処理系定義とする。

/

0

/0

/0)

返却値  

の複素正弦。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#(

/

0

/0

/0)

返却値  

の複素双曲線正弦。

/

0

/0

/0)

参考

分枝は負の実軸に沿って切断する。

返却値  

の複素平方根で,右半平面にある値。実引数が負の実数の場合,返却される値は正の虚軸上の値とする。

/

0

/0

/0)

返却値  

の複素正接。

/

0

/0

/0)

返却値  

の複素双曲線正接。

(

数値配列

(

ヘッダ

一覧

Q

&

''

の配列

&

''

配列の

"?6F

流部分配列

P&

&

''

配列の複合部分配列

P&

P&

''

マスク配列

P&

''

間接配列

!

0 &

!

0 &

!

0 &

'

0 &

'

0 &

'

0 &

U

0 &

U

0 &

U

0 &

)

0 &

)

0 &

)

0 &

V

0 &

V

0 &

V

0 &

W

0 &

W

0 &

W

0 &

0

0 &

0

0 &

0

0 &

1

0 &

1

0 &

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#)

1

0 &

0 &

0 &

0 &

0 &

0 &

0 &

00

0 &

00

0 &

00

0 &

11

0 &

11

0 &

11

0 &

%%

0 &

%%

0 &

%%

0 &

[%

0 &

[%

0 &

[%

0 &

0 &

0 &

0 &

0 &

0 &

0 &

%

0 &

%

0 &

%

0 &

%

0 &

%

0 &

%

0 &

0 &

0 &

0 &

0 &

+

0 &

+

0 &

+

0 &

0 &

0 &

0 &

0 &

L.

0 &

0 &

0 &

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

0 &

0 &

0 &

0 &

0 &

0 &

R

ヘッダ

は五つのクラステンプレート(

及び

),二つのクラス(

及び

)並びに 値の配列を表現し操作する一連の関数テンプレート

を定義する。

配列クラス

は,別名によるアクセスがないように定義されているので,これらのクラスに対する演算を

最適化することができる。

を返却する関数は,

のすべての定値メンバ関数に対してもある別の型が適用できる場

合,その別の型のオブジェクトを返却してもよい。この返却される型は,最も深い入れ子をもつ実引数の型と比べて

段以上深いテンプレートの入れ子となってはならない。

このような代替型を導入する処理系は,追加として次の関数 及び 演算子を用意しなければならない。

0

を実引数とするすべての関数 及び 演算子に対して,この代替型を実引数とする同

等の関数 及び 演算子

二つの

0

を実引数とするすべての関数 及び 演算子に対して,

0

と この代替型とのすべての組合せを実引数とする同等の関数 及び 演算子

特に,処理系は,この代替型から

を構築できなければならないし ,この型をクラス

及び

のオブジェクトに代入 及び 計算付

き代入できなければならない。

これらのライブラリ関数は,演算を実行するのに十分な資源がない場合,

)例外を送出して

もよい。この例外は必す( 須)ではない。

(

クラステンプレート

Q

Q

3

P&

''

+-(*(+(L

構築 及び 解体

 &

$P 

&

$P &

$P &

0 &

P0 &

P0 

&

P0 &

P

&

X &

''

+-(*(+(+

代入

0

%

0 &

0

%

0 &

0

%

P0 &

0

%

P0 

&

0

%

P0 &

0

%

P

0 &

''

+-(*(+(*

要素のアクセス

ST$P

&

0

ST$P

 &

附属書

はテンプレートの具現化での再帰的な入れ子の段数の最小値を推奨している。この要求は,

式の許されうる最大

の計算量を間接的に示している。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#*

''

+-(*(+(M

部分集合演算

ST

&

P

ST

 &

ST

&

P

ST

0 &

ST

&

P

ST

&

ST

$P

&

P

ST

$P

0 &

''

+-(*(+(/

単項演算子

&

&

&

&

''

+-(*(+(-

計算付き代入

0

!%

0 &

0

'%

0 &

0

U%

0 &

0

)%

0 &

0

V%

0 &

0

W%

0 &

0

0%

0 &

0

1%

0 &

0

%

0 &

0

%

0 &

0

!%

0 &

0

'%

0 &

0

U%

0 &

0

)%

0 &

0

V%

0 &

0

W%

0 &

0

1%

0 &

0

0%

0 &

0

%

0 &

0

%

0 &

''

+-(*(+(,

メンバ関数

$P

&

&

&

&

&

&

  

&

0  

&

$$P

%

  &

R&

R

クラステンプレート

は,要素の記憶域管理を行う

次元の配列とし ,その要素はゼロから順に番号

付けされる。これは,値の順序付き集合という数学的概念を表現する。このクラスを使って,よく使われる多次元の

添字から

次元の添字へ変換する手法 及び 一般化された添字付け演算子による強力な部分集合化機能によって,高

次元の配列のようにみせることができる。

処理系は

で宣言された関数のいずれかを

としてよい。

(

クラステンプレート

のコンスト ラクタ

この意図は,別名アクセスによるあいまいさ 及び 一時オブジェクトの増加の問題を解決するのに必要となる最低限の機能を提供する

配列のテンプレートを規定するためである。テンプレート

は,行列クラスではないし 線型空間クラスでもないが,これらの

クラスを設計するのに非常に有用な部品となる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

(

!

効果  

クラス

のオブジェクトを構築する

。このオブジェクトは,変更可能な左辺値として 又は 非

定値のポインタ

を介して,ライブラリ関数に渡されるまでは,要素数はゼロとする。

! '

このコンストラクタが作る配列の要素数は,実引数の値に等しい。この配列の要素は,型

の省略時コンストラク

タを用いて構築される。

!

)(

'

このコンストラクタが作る配列の要素数は,

番目の実引数に等しい。この配列の要素は,

番目の実引数の値で

初期化される。

!

$(

'

このコンストラクタが作る配列の要素数は,

番目の実引数

に等しい。この配列の要素の値は,

番目の実引数

が指す最初の

個の値で初期化される

番目の実引数の値が,

番目の実引数が指す値の個数より大きい場合,

動作は未定義とする。

!

!/0)

このコンストラクタが作る配列の要素数は,実引数の配列の要素数と等しい。この配列の要素は,実引数の配列の

対応する要素の値で初期化される。

!

/0)

!

/0)

!

4/0)

!

/0)

それぞれの変換コンストラクタは,参照の意味規則に従う

種類のテンプレートを

に変換する。

.!

デストラクタは,

!

のすべての要素に適用される。処理系は,割り付けられていたすべての記憶領域を解放し

てよい。

(

クラス

の代入

!/0)

,

!/0)

配列

!

の各要素に,実引数の配列の対応する要素の値を代入する。実引数の配列の要素数が配列

!

の要

素数に等しくない場合,結果の動作は未定義とする。

!/0)

,

)

スカラの代入演算子は,配列

!

の各要素に実引数の値を代入する。

!/0)

,

/0)

!/0)

,

/0)

!/0)

,

4/0)

!/0)

,

/0)

これらの演算子は,一般化された添字付け演算子の結果を

に直接代入する。

代入演算子の左辺の要素の値が左辺の別の要素の値に依存する場合,結果の動作は未定義とする。

表現を簡便にするため,

の残りの部分では,このオブジェクトを

配列

と表記する。

この省略時コンストラクタは,

の配列を使うために必す( 須)である。初期化後にメンバ関数

-

を用いて配列の大き

さを変更する場合にも使われる。

このコンストラクタは,

の配列をクラス

のオブジェクトに変換するのに都合がよい。

このコピーコンストラクタは,元の配列に対する別名ではなく,別個の配列を作る。処理系は,配列の記憶域を共有してもよいが,概

念的には別個の配列となることを保証するために,参照時コピー機構を実装しなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

(

(

クラステンプレート

の要素のアクセス

*+ '

)

*+ '

定値の配列に使われた場合,添字付け演算子は,その配列の対応する要素の値を返却する。非定値の配列に使われ

た場合,添字付け演算子は,その配列の対応する要素への参照を返却する。

任意の非定値のクラス

,型

及び 型

$

について,

の要素数よりも小さい

場合,式

ST

%

ST 

%%

は真とする。

任意の型

$

及び 型

$

について,

)

が非定値の配列

の要素数よりも小さい場合,式

0S)T

%%

0ST

)

は真とする。

同様に,任意の二つの非定値の配列

及び

並びに 型

$

及び

について,

の要素数よりも小さ

く,

の要素数よりも小さい場合,式

0ST

[%

0ST

は真とする。この性質は,別名によるアクセスがないこ

とを示しており,最適化コンパイラがこの性質を利用できることを意味する。

非定値の配列に対する添字付け演算子が返却する参照は,メンバ関数

$$

()

)がこの配列

に対して呼び出されたことがなく,この配列の生存期間が終わる前であれば ,有効なことを保証する。

添字付け演算子が,その配列の要素数以上の値をもつ型

$

の実引数で呼び出された場合,動作は未定義とする。

(

クラステンプレート

の部分集合演算

!/0

*+

/0

*+

!/0

*+

)

/0

*+

)

!/0

*+

!/0)

4/0

*+

!/0)

!/0

*+

!/'0)

/0

*+

!/'0)

これらの各演算は,配列の部分集合を返却する。

!

修飾されたものは,この部分集合を新しい

とし

て返却する。

!

修飾されないものは,元の配列への参照の意味規則に従うクラステンプレートのオブジェクトを

返却する。

(#

クラステンプレート

の単項演算子

!/0

%

!/0

A

!/0

.

!/0

-

これらの各演算子は,次の条件を満たす型

に対してだけ具現することができる。

指定された演算子が型

に適用できる。

その演算子が型

[

の場合は

%

型) 又は 型

[

の場合は

%

型)にあいまい

さなく変換できる型の値を返却する。

これらの各演算子は,配列

!

と同じ要素数の配列を返却する。返却される配列の各要素は,配列

!

の対

応する要素に,指定された演算子を適用した結果で初期化される。

((

クラステンプレート

の計算付き代入

!/0)

$,

!/0)

!/0)

E,

!/0)

!/0)

L,

!/0)

!/0)

%,

!/0)

!/0)

A,

!/0)

!/0)

I,

!/0)

!/0)

),

!/0)

!/0)

H,

!/0)

コンパイラは,インライン化,定数伝ぱ

,ループ融合,

から得られたポインタの追跡 及び その他の技術を用いて,

効率的な

を生成してよい。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

(

!/0)

//,

!/0)

!/0)

00,

!/0)

これらの各演算子は,指定された演算子が適用できる型

に対してだけ具現することができる。これらの各演算子

は,配列

!

の各要素 及び 実引数の配列の対応する要素に対して,指定された演算を実行する。

配列

!

が参照として返却される。

配列

!

の要素数と実引数の配列の要素数とが異なる場合,動作は未定義とする。計算付き代入を実行しても,

その左辺にある配列の要素への参照 及び ポインタは無効とならない。

計算付き代入演算子の左辺の要素の値が,左辺の他の要素の値に依存する場合,結果の動作は未定義と

する。

!/0)

$,

)

!/0)

E,

)

!/0)

L,

)

!/0)

%,

)

!/0)

A,

)

!/0)

I,

)

!/0)

),

)

!/0)

H,

)

!/0)

//,

)

!/0)

00,

)

これらの各演算子は,指定された演算子が適用できる型

に対してだけ具現することができる。

これらの各演算子は,配列

!

の各要素 及び 実引数に,指定された演算を適用する。

配列

!

が参照として返却される。

計算付き代入を実行しても,その左辺にある配列の要素への参照 及び ポインタは無効とならない。

()

クラステンプレート

のメンバ関数

'

'

この関数は,配列の要素数を返却する。

この関数は,

)%

が適用できる型

に対してだけ具現することができる。この関数は,配列の要素の総和を

返却する。

配列の要素数がゼロの場合,動作は未定義とする。配列の要素数が

の場合,

はゼロ番目の要素の値を返却

する。要素数が

以上の配列の場合,配列の一つの要素のコピー 及び 残りのすべての要素に

)%

を適用し

て,返却値を計算する。

)%

を適用する順序は未規定とする。

この関数は

!

に含まれる最小値を返却する。配列の要素数がゼロの場合,返却される値は未定義とする。配列

の要素数が

の場合,ゼロ番目の要素の値が返却される。要素数が

以上の配列の場合,

を用いて最小値

を決める。

この関数は

!

に含まれる最大値を返却する。配列の要素数がゼロの場合,返却される値は未定義とする。配列

の要素数が

の場合,ゼロ番目の要素の値が返却される。要素数が

以上の配列の場合,

を用いて最大値

を決める。

!/0

この関数は要素数が

のクラス

のオブジェクトを返却する。

<)

が負でなく,

より小

さい場合,そのオブジェクトの

<

番目の要素は,

! S<)T

とする。それ以外の場合,そのオブジェクトの

<

目の要素は,

とする。ゼロ番目の要素を最も左の要素とみると,

の値が正の場合,各要素は

個分左にシフト

し ,右から

個分の要素にはゼロが詰められる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

(

実引数の値が

V+

の場合,結果の配列の最初の二つの要素は省略時コンストラクタを使って構築される。結

果の配列の

番目の要素には,元の配列の最初の要素の値が代入される。

!/0

この関数は要素数が

のクラス

のオブジェクトを返却する。そのオブジェクトの

<

番目の要素

は,

! S<) U

$

 T

とする。ゼロ番目の要素を最も左の要素とみると,

の値が正の場合,各要素を

分左に循環シフトさせる。

!/0

!/0

)

これらの関数は,配列

!

と同じ要素数の配列を返却する。返却される配列の各要素には,配列

!

の対応

する要素に実引数の関数を適用して,その返却値が代入される。

!

' '

'(

,

この関数は,配列

!

の要素数を

$

に変更し ,その各要素に,

番目の実引数の値を代入する。要素数を変更

すると,配列のすべての要素へのポインタ 及び 参照は無効となる。

(

クラステンプレート

の非メンバ演算

(

クラステンプレート

項演算子

/

0

!/0

$

!/0)(

!/0)

/

0

!/0

E

!/0)(

!/0)

/

0

!/0

L

!/0)(

!/0)

/

0

!/0

%

!/0)(

!/0)

/

0

!/0

A

!/0)(

!/0)

/

0

!/0

I

!/0)(

!/0)

/

0

!/0

)

!/0)(

!/0)

/

0

!/0

H

!/0)(

!/0)

/

0

!/0

//

!/0)(

!/0)

/

0

!/0

00

!/0)(

!/0)

これらの各演算子は,次の条件を満たす型

に対してだけ具現することができる。

指定された演算子が型

に適用できる。

その演算子が型

又は 型

にあいまいさなく変換できる型の値を返却する。

これらの各演算子は,実引数の配列と同じ要素数の配列を返却する。返却される配列の各要素は,実引数の配列の

対応する要素に,指定された演算子を適用した結果で初期化される。

実引数の二つの配列の要素数が異なる場合,結果は未定義とする。

/

0

!/0

$

!/0)(

)

/

0

!/0

$

)(

!/0)

/

0

!/0

E

!/0)(

)

/

0

!/0

E

)(

!/0)

/

0

!/0

L

!/0)(

)

/

0

!/0

L

)(

!/0)

/

0

!/0

%

!/0)(

)

/

0

!/0

%

)(

!/0)

/

0

!/0

A

!/0)(

)

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

(

/

0

!/0

A

)(

!/0)

/

0

!/0

I

!/0)(

)

/

0

!/0

I

)(

!/0)

/

0

!/0

)

!/0)(

)

/

0

!/0

)

)(

!/0)

/

0

!/0

H

!/0)(

)

/

0

!/0

H

)(

!/0)

/

0

!/0

//

!/0)(

)

/

0

!/0

//

)(

!/0)

/

0

!/0

00

!/0)(

)

/

0

!/0

00

)(

!/0)

これらの各演算子は,次の条件を満たす型

に対してだけ具現することができる。

指定された演算子が型

に適用できる。

その演算子が型

又は 型

にあいまいさなく変換できる型の値を返却する。

これらの各演算子は,実引数の配列と同じ要素数の配列を返却する。返却される配列の各要素は,実引数の配列の

対応する要素 及び 配列でない実引数に,指定された演算子を適用した結果で初期化される。

(

クラステンプレート

の論理演算子

/

0

!/0

,,

!/0)(

!/0)

/

0

!/0

-,

!/0)(

!/0)

/

0

!/0

/

!/0)(

!/0)

/

0

!/0

0

!/0)(

!/0)

/

0

!/0

/,

!/0)(

!/0)

/

0

!/0

0,

!/0)(

!/0)

/

0

!/0

))

!/0)(

!/0)

/

0

!/0

HH

!/0)(

!/0)

これらの各演算子は,次の条件を満たす型

に対してだけ具現することができる。

指定された演算子が型

に適用できる。

その演算子が

%

型 又は

%

型にあいまいさなく変換できる型の値を返却する。

これらの各演算子は,実引数の配列と同じ要素数の

%

型の配列を返却する。返却される配列の各要素は,実引

数の配列の対応する要素に,指定された演算子を適用した結果で初期化される。

実引数の二つの配列の要素数が異なる場合,動作は未定義とする。

/

0

!/0

,,

!/0)(

)

/

0

!/0

,,

)(

!/0)

/

0

!/0

-,

!/0)(

)

/

0

!/0

-,

)(

!/0)

/

0

!/0

/

!/0)(

)

/

0

!/0

/

)(

!/0)

/

0

!/0

0

!/0)(

)

/

0

!/0

0

)(

!/0)

/

0

!/0

/,

!/0)(

)

/

0

!/0

/,

)(

!/0)

/

0

!/0

0,

!/0)(

)

/

0

!/0

0,

)(

!/0)

/

0

!/0

))

!/0)(

)

/

0

!/0

))

)(

!/0)

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

(#

/

0

!/0

HH

!/0)(

)

/

0

!/0

HH

)(

!/0)

これらの各演算子は,次の条件を満たす型

に対してだけ具現することができる。

指定された演算子が型

に適用できる。

その演算子が

%

型 又は

%

型にあいまいさなく変換できる型の値を返却する。

これらの各演算子は,実引数の配列と同じ要素数の配列を返却する。返却される配列の各要素は,実引数の配列の

対応する要素 及び 配列でない実引数に,指定された演算子を適用した結果で初期化される。

(

クラステンプレート

の超越関数

/

0

!/0

!/0)

/

0

!/0

!/0)

/

0

!/0

!/0)

/

0

!/0

!/0)

/

0

!/0

1

!/0)(

!/0)

/

0

!/0

1

!/0)(

)

/

0

!/0

1

)(

!/0)

/

0

!/0

!/0)

/

0

!/0

!/0)

/

0

!/0

!/0)

/

0

!/0

!/0)

/

0

!/0

!/0)

/

0

!/0

!/0)(

!/0)

/

0

!/0

!/0)(

)

/

0

!/0

)(

!/0)

/

0

!/0

!/0)

/

0

!/0

!/0)

/

0

!/0

!/0)

/

0

!/0

!/0)

/

0

!/0

!/0)

これらの関数は,それぞれの名前から一意に定まる関数を適用できる型

に対してだけ具現することができる。こ

の関数は,型

又は あいまいさなく型

に変換できる型の値を返却しなければならない。

(

クラス

Q

Q

3

 &

$P 

$P 

$P &

$P

&

$P

&

$P

&

R&

R

クラス

は,配列の

48&/

流の部分配列を表現する。

部分配列は,開始位置,長さ 及び 刻み幅で指定

する。

(

クラス

のコンスト ラクタ

 '

(

'

(

'

)

26

2"

6

*

を表す。

プログラムは,このクラスを具現することができる。例えば,

 5

95

 :5

;** <

6 #

&

2"

6

*=

1

 "

"

7

3!5

0

6

(

>5

3 *"

*

" " 

 #5

5

?

を参照のこと。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

((

の省略時コンストラクタは,要素のない型

のオブジェクトを作る。省略時コンストラクタは,

の配列の宣言を許すためにだけ用意されている。実引数をもつ

のコンストラクタは,開始位置,長さ 及び 刻

み幅を実引数とする。

は,配列から

番目,

番目,

番目,

番目,

番目,

番目,

番目 及び

番目

の要素を選択する部分配列を構築する。

(

クラス

のアクセス関数

'

'

'

'

これらの関数は,それぞれクラス

のオブジェクトに指定された開始位置,長さ 及び 刻み幅を返却する。

(#

クラステンプレート

Q

P

Q

3

P&

%

&

!%

&

'%

&

U%

&

)%

&

V%

&

W%

&

0%

&

1%

&

%

&

%

&

%

0 &

XP &

3

P &

P

P0 &

P0

%

P0 &

R&

R

テンプレ ート

は,クラス

の添字付け演算子

33

S

T

で補助テンプレートとして使われる。テンプレート

は,クラス

のオブジェクトによっ

て指定される配列の部分集合への参照の意味規則に従う。

SL 

* T

%

&

は,

の部分配列の要素に,

の要素を代入する効果をもつ。この部分配列

は,

から

番目,

番目,

番目,

番目 及び

番目の要素を選択する。

参考

すべてのコンストラクタは非公開なので,

"##

プログラムは

を具現することはできない。

これは,補助クラスとしてだけ使われることを意図していて,利用者がこのクラスの存在を意識すること

はない。

(#

クラステンプレート

のコンスト ラクタ

)

テンプレート

は,公開のコンストラクタをもたない。これらのコンストラクタは,非公開として宣言

される。これらのコンストラクタは,定義されなくてもよい。

(#

クラステンプレート

の代入

!

,

!/0)

)

,

)

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

()

二つの演算子のうち後者は,非公開として宣言され,定義されなくてもよい。前者は,参照の意味規則に従い,ク

ラス

のオブジェクトが参照するクラス

のオブジェクトの選択された要素に,実引数の配

列の要素の値を代入する。

(#

クラステンプレート

の計算付き代入

!

$,

!/0)

!

E,

!/0)

!

L,

!/0)

!

%,

!/0)

!

A,

!/0)

!

I,

!/0)

!

),

!/0)

!

H,

!/0)

!

//,

!/0)

!

00,

!/0)

これらの計算付き代入は,参照の意味規則に従い,実引数配列の要素 及び クラス

のオブジェクトが

参照するクラス

のオブジェクトの選択された要素に,指定された演算を適用する。

(#

クラステンプレート

の充てん関数

!

,

)

この関数は,参照の意味規則に従い,クラス

のオブジェクトが参照するクラス

のオブ

ジェクトの要素に,実引数の値を代入する。

((

クラス

Q

Q

3

 &

$P

$P

0

$P

0

 &

$P

&

$P

&

$P

&

R&

R

このクラスは,配列の複合部分配列を表現する。

は,開始位置(

&

),長さ(

0

)の集合 及び 刻み幅(

)

の集合によって定義する。長さの集合の要素数は,刻み幅の集合の要素数と等しくなければならない。

は,刻み幅の個数と同数の添字(

"

)の集合から,単一の添字

への写像を表現する。これは,

次元であ

るテンプレート

を用いて多次元配列クラスを構築するのに役立つ。多次元の添字

"

から

0

までの値

をとるとして,

によって指定される

次元の添字の値の集合は,

Q

&

#

"

)

となる。

%

*

%

Q+ 

*R

%

QLO 

LR

この複合部分配列の指定は,次の

次元の添字の並びを生成する。

Q

#

#

#

これを順に並べると,次のとおりになる。

"

"

"

Q

%

%

%

後にある添字が先に変化する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

(

同じ添字の値が現れる退化した複合部分配列でもよい。

前の例で,刻み幅を

に変えた場合,その結果の添字の並びの最初のいくつかの要素は次のように

なる。

*  

M  

/  

M  

/  

-  

(((

退化した複合部分配列を

ST

の非定値版の実引数とした場合,その結果の動作は未定義

とする。

((

クラス

のコンスト ラクタ

 '

(

!/'0)

(

!/'0)

)

省略時コンストラクタは,要素のないクラス

のオブジェクトを作る。実引数をもつコンストラクタは,指

定された開始位置,長さ 及び 刻み幅で,箇条

((

で説明したクラス

のオブジェクトを作る。

((

クラス

のアクセス関数

'

!/'0

'

!/'0

これらのアクセス関数は,それぞれクラス

のオブジェクトに指定された開始位置,長さ 及び 刻み幅の表

現を返却する。

()

クラステンプレート

Q

P

Q

3

P&

%

&

!%

&

'%

&

U%

&

)%

&

V%

&

W%

&

0%

&

1%

&

%

&

%

&

%

0 &

XP &

3

P &

P

P0 &

P0

%

P0 &

R&

R

テンプレート

は,クラス

の次に示す添字付け演算子で補助テンプレートとして使われる。

P

33

ST

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

(*

テンプレート

は,クラス

のオブジェクトによって指定された配列の部分集合への参照の意味

規則に従う。

SL 

 T

%

は,

の複合部分配列の要素に,

の要素を代入する効果をもつ。

参考

すべてのコンストラクタは非公開なので,

"##

プログラムは,

を具現することはできな

い。これは,補助クラスとしてだけ使われることを意図していて,利用者がこのクラスの存在を意識する

ことはない。

()

クラステンプレート

のコンスト ラクタ

)

テンプレート

は,公開のコンストラクタをもたない。これらのコンストラクタは,非公開として宣

言される。これらのコンストラクタは,定義されなくてもよい。

()

クラステンプレート

の代入

!

,

!/0)

)

,

)

二つの演算子のうち後者は,非公開として宣言され,定義されなくてもよい。前者は,参照の意味規則に従い,ク

ラス

のオブジェクトが参照するクラス

のオブジェクトの選択された要素に,実引数の配

列の要素の値を代入する。

()

クラステンプレート

の計算付き代入

!

$,

!/0)

!

E,

!/0)

!

L,

!/0)

!

%,

!/0)

!

A,

!/0)

!

I,

!/0)

!

),

!/0)

!

H,

!/0)

!

//,

!/0)

!

00,

!/0)

これらの計算付き代入は,参照の意味規則に従い,実引数の配列の要素 及び クラス

のオブジェク

トが参照するクラス

のオブジェクトの選択された要素に,指定された演算を適用する。

()

クラステンプレート

の充てん関数

!

,

)

この関数は,参照の意味規則に従い,クラス

のオブジェクトが参照するクラス

のオ

ブジェクトの要素に,実引数の値を代入する。

(

クラステンプレート

Q

P

Q

3

P&

%

&

!%

&

'%

&

U%

&

)%

&

V%

&

W%

&

0%

&

1%

&

%

&

%

&

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

)

%

0 &

XP &

3

P &

P

P0 &

P0

%

P0 &

R&

R

テンプレート

は,次に示すマスク添字付け演算子で補助テンプレートとして使われる。

P

33

ST

テンプレート

は,論理値マスクで指定された配列の部分集合への参照の意味規則に従う。式

ST

%

&

は,

のマスクされた添字の要素(

の対応する要素が

のもの )に,

の要素を代入する効果をもつ。

参考

すべてのコンストラクタは非公開なので,

"##

プログラムは

の具現化を宣言することは

できない。これは,補助クラスとしてだけ使われることを意図していて,利用者がこのクラスの存在を意

識することはない。

(

クラステンプレート

のコンスト ラクタ

4

4

4)

テンプレート

は,公開のコンストラクタをもたない。これらのコンストラクタは,非公開として宣言

される。これらのコンストラクタは,定義されなくてもよい。

(

クラステンプレート

の代入

!

,

!/0)

4)

,

4)

二つの演算子のうち後者は,非公開として宣言され,定義されなくてもよい。前者は,参照の意味規則に従い,そ

れが参照するクラス

のオブジェクトの選択された要素に,実引数の配列の要素の値を代入する。

(

クラステンプレート

の計算付き代入

!

$,

!/0)

!

E,

!/0)

!

L,

!/0)

!

%,

!/0)

!

A,

!/0)

!

.,

!/0)

!

),

!/0)

!

H,

!/0)

!

//,

!/0)

!

00,

!/0)

これらの計算付き代入は,参照の意味規則に従い,実引数の配列の要素 及び クラス

のオブジェクト

が参照するクラス

のオブジェクトの選択された要素に,指定された演算を適用する。

(

クラステンプレート

の充てん関数

!

,

)

この関数は,参照の意味規則に従い,クラス

のオブジェクトが参照するクラス

のオブ

ジェクトの要素に,実引数の値を代入する。

(*

クラステンプレート

Q

P

Q

3

P&

%

&

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

)

!%

&

'%

&

U%

&

)%

&

V%

&

W%

&

0%

&

1%

&

%

&

%

&

%

0 &

XP 

&

3

P &

P

P0 

&

P0

%

P0 &

R&

R

テンプレート

は,次に示す間接添字付け演算子で補助テンプレートとして使われる。

P

33

ST

$P

テンプレート

は,間接添字付けで指定された配列の部分集合への参照の意味規則に従う。

ST

%

&

は,

に現れる添字の要素に,

の要素を代入する効果をもつ。

参考

すべてのコンストラクタは非公開なので,

"##

プログラムは

の具現化を宣言するこ

とはできない。これは,補助クラスとしてだけ使われることを意図していて,利用者がこのクラスの存在

を意識することはない。

(*

クラステンプレート

のコンスト ラクタ

)

テンプレート

は,公開のコンストラクタをもたない。これらのコンストラクタは,非公開として

宣言される。これらのコンストラクタは,定義されなくてもよい。

(*

クラステンプレート

の代入

!

,

!/0)

)

,

)

二つの演算子のうち後者は,非公開として宣言され,定義されなくてもよい。前者は,参照の意味規則に従い,そ

れが参照するクラス

のオブジェクトの選択された要素に,実引数の配列の要素の値を代入する。

が指すクラス

のオブジェクトの同じ要素が

回以上参照された場合,動作は未定義

とする。

次の例では,

番目の要素が間接指定によって

回指定されているので,動作は未定義となる。

ST

%

Q+ 

MR&

$P

/ &

.( 

L.  

L( 

/ &

ST

%

&

(*

クラステンプレート

の計算付き代入

!

$,

!/0)

!

E,

!/0)

!

L,

!/0)

!

%,

!/0)

!

A,

!/0)

!

I,

!/0)

!

),

!/0)

!

H,

!/0)

!

//,

!/0)

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

)

これらの計算付き代入は,参照の意味規則に従い,実引数の配列の要素 及び クラス

のオブジェ

クトが参照するクラス

のオブジェクトの選択された要素に,指定された演算を適用する。

が指すクラス

のオブジェクトの同じ要素が

回以上参照された場合,動作は未定義

とする。

(*

クラステンプレート

の充てん関数

!

,

)

この関数は,参照の意味規則に従い,クラス

のオブジェクトが参照するクラス

オブジェクトの要素に,実引数の値を代入する。

(

一般化された数値演算

ヘッダ

一覧

Q

<< 

<

<

<<

 &

<< 

"B

<

<

<<

"B

P &

<<L 

<<+ 

P<

<

L

<<L

<<+

 &

<<L 

<<+ 

"BL 

"B+

P<

<

L

<<L

<<+

"BL

PL 

"B+

P+ &

<< 

B<

B<

P<

<

<<

B<

 &

<< 

B< 

"B

B<

P<

<

<<

B<

"B

P &

<< 

B<

B<

P

<

<

<<

B<

 &

<< 

B< 

"B

B<

P

<

<

<<

B<

"B

P &

R

箇条

#

で規定するアルゴ リズムの実引数の型に対する要件は,次のアルゴ リズムにもあてはまる。

(

累積

/

==(

0

 ==

(

==

(

/

==(

(

F90

 ==

(

==

(

(

F9

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

)

効果  

累積変数

を初期値

で初期化し ,次に区間

7

を動く反復子

のそれぞれに対して

%

)

!

又は

%

を順に実行して

を更新することによって,結果を計算する。

要件  

は,型

77

)及び

6

)の要件を満たさなければならない。

は,副作用を起こしてはならない。

(

内積

/

==(

==1(

0

 == 

(

==

(

==1

1(

/

==(

==1(

(

F9(

F910

 == 

(

==

(

==1

1(

(

F9

(

F91

1

効果  

累積変数

を初期値

で初期化し,次に区間

7L

L

を動く反復子

L

及び 区間

7+

+

#

L

L

を動く反復子

+

のそれぞれに対して

%

)

!L 

!

!+ 

又は

%

+!L 

!+  

を順に実行して

を更新することによって,結果を計算する。

要件  

は,型

77

)及び

6

)の要件を満たさなければならない。

L

及び

+

は,副作用を起こしてはならない。

(

部分和

/

==(

9=0

9=

 == 

(

==

(

9=

/

==(

9=(

F90

9=

 == 

(

==

(

9=

(

F9

効果  

区間

7

#

を動く反復子

によって参照され る各要素に,

!

)

!

)

L  

)

)

!

)

V

   

又は

!

)

L   

  

!

)

V

   

を計算した値を代入する。

返却値  

)

V

計算量  

をちょうど

V

V

L

回適用する。

要件  

は,副作用を起こしてはならない。

参考

は,

に等しくてもよい。

(

隣接差分

/

==(

9=0

9=

D = =  

(

==

(

9=

/

==(

9=(

F90

9=

D = =  

(

==

(

9=

(

F9

累積は,

6

の縮約演算子 及び

**

6

&$

関数と類似しているが,必ず初期値を要求することによって,空列に対

する縮約の結果を定義することの困難さを回避している。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

)

効果  

区間

7

#

L

#

を動く反復子

によって参照される各要素に,

!

)

V

  

V

!

)

V

V

又 は

!

)

V

   

!

)

V

V

L  

を計算した値を代入する。

で参照される要素には,

!

の値を代入する。

要件  

は,副作用を起こしてはならない。

参考

は,

に等しくてもよい。

返却値  

)

V

計算量  

をちょうど

V

V

L

回適用する。

(#

ライブラリ

に ヘッダ

を規定し ,

に ヘッダ

)を規定する。

ヘッダ

一覧

種別

名前  

マクロ

;G:8

H6?

関数

+

L.

ヘッダ

一覧

種別

名前  

マクロ

E6A#

@65

関数

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

"

ライブラリヘッダ

(

及び

(

に等しい。ただし ,次

のものを追加する。

にある幾つかの

版の数学関数に加えて,

"##

では,これらの関数と同じ意味をもつ

で多重

定義された版を追加する。

追加された呼出し情報は次のとおりとする。

EE

!

! (

EE

!

にある幾つかの

版の数学関数に加えて,

"##

では,これらの関数と同じ意味をもつ

及び

で多重定義された版を追加する。

追加された呼出し情報は次のとおりとする。

1 (

 (

 (

$

 (

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

)#

 (

$

 (

 (

EE

 (

1

(

(

(

$

(

(

$

(

(

参照  

6

)#

)

及び

)(

)

入出力ライブラリ

)

では,

"##

プログラムが入出力操作に用いるライブラリ要素を規定する。

ここで規定する項目を,

に示す。

 入出力ライブラリ

ヘッダ

)

要件

)

事前宣言

)

標準入出力オブジェクト

)

入出力ストリームの基底クラス

)#

ストリームバッファ

)(

書式制御 及び 操作子

))

文字列ストリーム

)

ファイルストリーム

)

入出力スト リームに対する要件

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

)(

)

%

の制限

)

で規定する関数(

33

を除く。)は,いずれも

33

又は

33

のインスタンスを呼ばない。次に示す場合の動作は,未定義とする。

)

で規定する関数から呼ばれた利用者定義の関数が

を呼んだ場合

)

で規定するクラスを上書きする仮想関数として,利用者定義の関数が

を呼んだ場合

)

位置指定に関する制限

)

で定義されるクラスのうち,テンプレート実引数に

及び

をもつ

ものは,

33

であり,

33

であるものとして動作する。特

に指定がある場合を除き,

33

及び

33

が他の型であったときの挙動は,処理系定義

とする。

)

事前宣言

ヘッダ

の一覧

Q

P&

P

&

P

P

&

&

%

P

P&

%

P

P&

%

P

P&

%

P

P&

%

P

P&

%

P

6

%

P&

%

P

6

%

P

&

%

P

6

%

P

&

%

P

6

%

P

&

%

P

P&

%

P

P&

%

P

P&

%

P

P&

%

P

P

&

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

))

%

P

P

&

P

&

P

P

&

P

&

P

&

P

&

P

&

P

&

P

&

P

&

P

&

P

&

P

&

P

&

P

&

P

P

&

P

P

&

P

P

&

P

P

&

P

P

&

P

P

&

P

P

&

P

P

&

P

P

&

P

P

&

P

P

&

P

P

&

&

P

3

3

P

&

P

P

33

P

&

R

テンプレートの省略時実引数は,

の一覧だけでなく他のヘッダの一覧にも現れる。しかし,

同時に他のヘッダを取り込んでも,適格とする。

参考

クラステンプレート特殊化

は,次に示すクラステンプレートの仮想基底

クラスとして使われる。

これらから派生したクラステンプレート。

は,

及び

の両方

から派生したクラステンプレートとする。

クラステンプレート特殊化

は,クラステンプレート

及び

の基底クラスとして使われる。

クラステンプレート特殊化

は,クラステンプレート

及び

の基底クラスとして使われる。

クラステンプレート特殊化

は,クラステンプレート

及び

の基底クラスとして使われる。

クラステンプレート特殊化

は,クラステンプレート

%&

と他のヘッダとを同時に取り込む場合,省略時実引数の複数出現に関する規則に適うようにすることは,処理系の責任とす

る。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

)

及び

の基底クラスとして使われる。

他の型定義は,

及び

に対して特殊化されたクラステンプレートのイン スタン スを定義

する。

クラステンプレート

の特殊化は,ファイル中の位置情報を指定するために用いる。

に対して特殊化されたストリームの位置指定には

を用い,

に対して特殊化さ

れたストリームの位置指定には

を用いる。

の一覧は,

の間に循環参照が生じることを示唆している。

処理系は,同等な型による置換えによって,この循環参照を避けることができる。一つの方法を次に示す。

Q

(((

R&

''

何にも依存しない

(((

PF68&

''

の処理系依存の非公開宣言

PF68

&

P

Q

P&

''

(((

R

)

標準入出力スト リームオブジェクト

ヘッダ

の一覧

Q

&

&

&

&

&

&

&

&

R

ヘッダ

は,標準

"

ストリームに結び付けられたオブジェクト(それは,

)

)の中で

宣言された関数によって提供される。)を宣言する。

対応関係にあるワイド 文字ストリーム 及び ナロー文字ストリームに対し ,操作を混合して実行する場合,その動

作は,

6

追補

で規定されている

9<?8

に対する混合操作と同じ意味をもつ。そのようなオブジェクトは,

クラス

33<

の最初のオブジェクトの構築より前 又は 構築の間に構築され,結び付けが確立する。いず

れにせよ,この処理は,

本体の実行開始以前に行われる。

これらのオブジェクトは,プログラムの実行中には解体されない。

)

ナロースト リームオブジェクト

オブジェクト

は,

中で宣言された

オブジェクトに結び付けられたストリームバッファからの

入力を制御する。

オブジェクト

の初期化終了後,

は,

0

を返す。これを除き,

の状態は,

33

)

)に対して要求している状態に同じとする。

オブジェクト

は,

)

)中で宣言された

オブジェクトに結び付けられたストリーム

バッファへの出力を制御する。

可能ならば,これらのオブジェクトが必要となる以前に初期化することを,処理系に対して推奨する。

静的オブジェクトのコンストラクタ( 構築子)及び デストラクタ( 解体子)は,

&

からの読込み 又は

&$

若しくは

&

への書出しを行うため,これらのオブジェクトにアクセスすることができる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

)*

オブジェクト

は,

)

)中で宣言された

オブジェクトに結び付けられたストリーム

バッファへの出力を制御する。

オブジェクト

の初期化終了後,

0

は,非ゼロとなる。これを除き,

の状態は,

33

)

)に対して要求している状態に同じとする。

オブジェクト

は,

)

)中で宣言された

オブジェクトに結び付けられたストリーム

バッファへの出力を制御する。

)

ワイド スト リームオブジェクト

オブジェクト

は,

中で宣言された

オブジェクトに結び付けられたストリームバッファから

の入力を制御する。

オブジェクト

の初期化終了後,

は,

0

を返す。これを除き,

の状態は,

33

)

)に対して要求している状態に同じとする。

オブジェクト

は,

)

)中で宣言された

オブジェクトに結び付けられたストリーム

バッファへの出力を制御する。

オブジェクト

は,

)

)中で宣言された

オブジェクトに結び付けられたストリーム

バッファへの出力を制御する。

オブジェクト

の初期化終了後,

0

は,非ゼロとなる。これを除き,

の状態

は,

33

)

)に対して要求している状態に同じとする。

オブジェクト

は,

)

)中で宣言された

オブジェクトに結び付けられたストリーム

バッファへの出力を制御する。

)

入出力スト リームの基底クラス

ヘッダ

の一覧

&

&

'

$&

&

P&

%

P

P&

''

+,(M(/

操作子

P0

P0

 &

P0

P0

 &

P0

P0

 &

P0

P0

 &

P0

P0

 &

P0

P0

 &

P0

P0

 &

P0

P0

 &

P0

P0

 &

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

P0

P0

 &

P0

P0

 &

P0

P0

 &

P0

P0

 &

P0

P0

 &

''

+,(M(/(+

字詰めフィールド

P0

P0

 &

P0

P0

 &

P0

P0

 &

''

+,(M(/(*

基数フィールド

P0

P0

 &

P0

P0

 &

P0

P0

 &

''

+,(M(/(M

浮動小数点フィールド

P0

P0

 &

P0

P0

 &

)

型は,

)

の要件を満足する処理系定義の型とする。

'

$

は,符号付き基本整数型のいずれか一つに対する同義語とする。それは,入出力操作によって転送さ

れた文字数や,入出力バッファの大きさを表すのに用いる。

  

)

クラス

P

3

&

&

&

&

&

&

&

&

&

&

&

&

&

&

&

&

&

&

&

&

&

&

&

-

は,

では

-

が使われるであろう大多数の箇所で用いる。

-

が用いるほとんどの場合には,

-

を用いることが可能であろう。ただし,

.$%

のコンストラクタは負の値を要求するので例外とする。この場合は,

-

に対応する符号付きの型を用いるべきであろう(それは,

+.

において

-

と呼ばれるものである。)

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

&

&

&

&

&

&

&

&

&

&

&

&

&

<&

''

+,(M(+(+

の状態

&

 &

 &

 &

 &

$

&

$

$

 &

$

&

$

$

 &

''

+,(M(+(*

現地特性

0

 &

&

''

+,(M(+(/

記憶域

 &

0

 &

!0

 &

''

デストラクタ

XP &

''

+,(M(+(-

コールバック

P

&

!P

P0 

 &

P

P

 &

PP

%

 &

3

P &

3

''

 (&

説明のためだけ

''

!

$$

)&

説明のためだけ

''

!!

$$

)&

説明のためだけ

3

P

P0 &

P0

%

P0 &

&

クラス

は,次のメンバ型を定義する。

からの派生クラスであるクラス

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

クラス

<

個のビットマスク型

及び

被列挙型

は,次のデータを保持する。

ストリームバッファの一貫性を反映している状態情報。

入力列の解釈 及び 出力列の生成に影響を与える制御情報。

プログラムによって格納され,プログラムが非公開的に用いる追加情報。

参考

説明のため,このクラスが保持するデータを次に示す。

 (

整数配列

$$

)

又は ポインタ配列

$$

)

の中で,次に利用可能な要素

の添字。この配列は,プログラムが非公開的に用いるために維持される。その初期値は未規定

とする。

!

$$

)

任意長の

配列の先頭要素へのポインタ。この配列は,プログラムが非公開

的に用いるために維持される。

!!

$$

)

任意長のポインタ配列の先頭要素へのポインタとする。この配列は,プログ

ラムが非公開的に用いるために維持される。

)

)

クラス

33

P33

3

3

0

#! &

X &

!

 &

&

入出力ストリームライブラリ中の関数は,ストリームバッファの操作中にエラーを検出すると,例外オブジェクト

を送出してそのエラーを報告する。クラス

は,すべての例外オブジェクトの型の基底クラスを定義する。

)

効果  

クラス

のオブジェクトを構築する。

事後条件  

  

#!(

  

%%

.

$

返却値  

例外構築時に渡されたメッセージ

&1

)

33

は,ビットマスク型(

)

)とする。各要素をセットすることによる効果を

に示す。

の効果

要素

セット時の効果

%

型をアルファベット形式で入出力する。

整数の入出力を

進法で行う。

浮動小数点数の出力を,固定小数点記法で行う。

整数の入出力を

進法で行う。

ある種の出力において,指定された中間位置に詰め物文字を加える。

そのような位置指定がない場合,

に同じとする。

ある種の出力において,詰め物文字を右端( 最後の位置)に加える。

整数の入出力を

進法で行う。

ある種の出力において,詰め物文字を左端( 先頭の位置)に加える。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

の効果( 続き)

要素

セット時の効果

浮動小数点の出力を,指数付き記法で行う。

整数出力の前に,基数表示を加える。

浮動小数点数の出力時に,小数点文字を無条件に付加する。

非負数値の出力時に

)

を付加する。

ある種の入力操作の前に,空白類文字を読み飛ばす。

各出力操作の後で,必ず出力をフラッシュする。

出力時に,ある種の小文字を対応する大文字に変換する。

更に,型

は,次の定数も定義する。

が定義する定数

定数名

許される値

1

1

1

1

1

)

33

は,

#

に示す要素をもったビットマスク型(

)

)とする。

#

の効果

要素

セット時の効果

入力列 又は 出力列の一貫性が失われたことを表す

( 例えば ,ファイル読込み時の復旧不可能なリード エラー。)

入力操作が入力列の終わりに到達したことを表す。

入力操作が期待している文字の読込みに失敗したこと 又は 出

力操作が意図した文字の生成に失敗したことを表す。

更に,型

は,次の定数も定義する。

値ゼロをもつ。

)

33

は,

(

に示す要素をもったビットマスク型(

)

)とする。

(

の効果

要素

セット時の効果

各書出しの実行前に,ストリームの終端までシークする。

オープン操作を実行し ,その直後にストリームの終端までシークする。

バイナリモード の入出力を行う(テキストモード ではない。)

入力用にオープンする。

出力用にオープンする。

オープン時に,既存のストリームの切捨てを行う。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

)#

33

4

は,

)

に示す要素をもった被列挙型(

)

)とする。

)

の効果

要素

意味

( 以後の入出力に対し )ストリームの先頭からの相対位置によるシークを要求する。

列内の現在位置からの相対位置によるシークを要求する。

列末尾からの相対位置によるシークを要求する。

)(

クラス

33<

P33<

3

< &

X< &

3

''

&

説明のためだけ

&

クラス

<

は,次のようなオブジェクトを規定する。

そのオブジェクトを構築することにり,

)

)で宣言された

個のオブジェクトが構築さ

れることを保証する。

その

個のオブジェクトは,ファイルストリームバッファと

)

)の中で宣言された関数

が提供する標準

"

ストリームとを結びつける。

説明のため,このクラスは,次のデータを保持しているとする。

クラス

<

に対するコンストラクタ 及び デストラクタの呼出しカウンタ。初期

値は,ゼロとする。

=

効果  

クラス

<

のオブジェクトを構築する。

がゼロの場合,

を格納した後,

及び

の各オブジェクト(

)

参照),並びに

及び

の各オブジェクト(

)

参照)を構築して初期化する。そうでない場合でも,この関数は呼び出されると

の値を

増やす。

.=

効果  

クラス

<

のオブジェクトを解体し ,

の値を

減らす。その結果が

であれば ,

及び

を呼ぶ。

)

の制御状態に関する関数

返却値  

入力 及び 出力に関する書式制御情報。

事後条件  

%%

返却値  

変更前の

の値。

効果  

L

にセットする。

返却値  

変更前の

の値。

(

4

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

効果  

をクリアし ,

L

0

にセットする。

返却値  

変更前の

5!

の値。

!

4

効果  

をクリアする。

'

返却値  

出力時の精度。

'

 '

事後条件  

%%

返却値  

変更前の

の値。

'

返却値  

出力時のフィールド 幅最小値( 文字数)

'

 '

事後条件  

%%

返却値  

変更前の

の値。

)

の現地特性に関する関数

)

効果  

登録されたコールバックの対

  ( 

)(

)を

 !  ( 

の形で呼ぶ。ただ

し,この呼出しが行われるのは,

の中から

33 

を呼んだ際に,新しい現地特性値

が返される

場合とする。

返却値  

この関数の呼出し前の

の値。

事後条件  

0

%%

返却値  

どの現地特性も浸透していない場合,大域的

"##

の現地特性

( 構築時の値)を返す。そうでな

い場合,現地特性依存の入出力処理を実行するために浸透している現地特性を返す。

)

の静的メンバ

,

返却値  

標準入出力ストリームオブジェクト(

)

)が同期している場合は

,そうでない場合は

。この関

数が最初に呼ばれたときは

を返す。

効果  

この関数が呼ばれる前に,標準ストリームを用いた入出力操作が行われた場合,この関数の効果は,処理系定

義とする。そうでない場合,この関数が

を実引数にして呼ばれると,標準ストリームが標準

"

ストリームと

独立に動作することを許す。

)#

の記憶域に関する関数

返却値  

 ())

)

効果  

$$

)

が空ポインタのとき,

の配列(その大きさは未規定)を割り付け,その先頭要素へのポ インタを

$$

)

に格納する。次に,配列要素

$$

) (

を含めることができるように

$$

)

が指す配列を拡大する。新たに割

り付けられた要素は,ゼロで初期化される。この関数が返す参照は,オブジェクトに対して他の操作が行われると,

無効となる。

で示される整数配列 及び

によって指されるポインタ配列を,処理系が,疎なデータ構造( 例えば,それぞれ

個の

キャッシュをもつようなもの)として実装することは自由である。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

(

しかし,参照された記憶域の値は保持される。したがって,次に

が呼び出されるまで,同じ添え字による

の呼出しは,同じ値への異なる参照を返す。この関数の実行に失敗し

!

オブジェク

トの基底部分オブジェクト 又は 部分オブジェクトであるとき,この効果は,

33

派生オブジェクトに対して呼び出すことと同等とする(それが

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

返却値  

成功した場合,

$$

) (

。失敗した場合,ゼロで初期化された有効な

0

値。

!$

)

効果  

$$

)

が空ポインタのとき,

へのポ インタ配列( その大きさは,未規定 )を割り付け,その先頭要素

へのポ インタを

$$

)

に格納する。次に,配列要素

$$

)ST

を含めることができるように

$$

)

が指す配

列を拡大する。新たに割り付けられた要素は,空ポインタで初期化され る。この関数が返す参照は,オブジェクト

に対して他の操作が行われると,無効となる。しかし ,参照された記憶域の値は,保持され る。したがって,次に

が呼び出されるまで,同じ添字による

の呼出しは,同じ値への異なる参照を返す。この関数の実行に

失敗し

!

オブジェクトの基底部分オブジェクト 又は 部分オブジェクトであるとき,この

効果は,

33

を派生オブジェクトに対して呼び出すこと同等とする(それが

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

返却値  

成功した場合,

$$

)

 (T

。失敗した場合,ゼロで初期化された領域への有効な

!0

参考

同じオブジェクトに対して

を呼んだ場合,以前の返却値は,有効でなくなる可能性がある。

)(

のコールバック

!

4 !   4

(

効果  

を登録する。この対は,

)

),

X

))

)など

の呼出し 中に,

を実引数として関数

を呼び出すのに用いる。登録された関数は,イベントが発生したとき

に,登録時と逆の順序で呼び出される。コールバック関数が呼び出されている最中に登録された関数は,次のイベン

トの発生時まで呼ばれない。

要件  

関数

は,例外を送出してはならない。

参考

同等な対であっても,併合しない。

回登録された関数は,

回呼び出される。

))

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

効果  

構築後,

の各メンバの値は,不定とする。これらのメンバは,

33

を呼び出して初期

化しなければならない。

のオブジェクトが,初期化される前に解体された場合の動作は,未定義とする。

.

効果  

クラス

のオブジェクトを解体する。登録されたコールバックの対

  ( 

)

)を

 !  ( 

の形で呼び出す。ただし,この呼出しが行われるのは,

の中で呼ばれる

メンバ関数が適切に定義された結果を返す場合とする。

)

クラステンプレート

3

''

+,(M(*(L

メンバ

&

 &

&

''

&

説明のためだけ

&

例えば,領域を割り付けることができない場合。

例えば,領域を割り付けることができない場合。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

)

)

のメンバ

!

効果  

に代入する。

返却値  

現在の

の値。

)

に対する要件

許される操作を

に示す。この表では,次に挙げる記号を用いる。

C

は,

のインスタンスを表す。

及び

は,型

C

の値表す。

B

は,型

を表す。

は,型

の値を表す。

$

は, 型

$

の値を表す。

は,型

の値を表す。

 位置型に対する要件

操作

返却値の型

操作の意味

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

%%

参考  

デストラクタの存在を

仮定する。

C

 &

C

%

R

事後条件  

%%

からの変換

B99

への変換

CB  

%%

%%

に変換可能な型

%%

は同値関係

[%

に変換可能な型

[%% 

%

)

)%

オフセットを加える

V

%%

%

V

V%

オフセットを引く

)

%%

%

V

B99

距離

)

%%

$

変換

$B$ 

%%

$

B$ 

B99

変換

$

B$  

%%

$

参考

すべての処理系は,

)

の要件を満たすように,

オブジェクトに対して,多重定義された演

算子を提供しなければならない。これらの演算子が,

のメンバ,大域的演算子 又は それ以外の何ら

かの方法で提供されたもののいずれであるかは,未規定とする。

33

の値を返すストリーム操作では,エラーを表す無効な値として

CBVL  

の値を用いる。型

33

の値を受け付ける

又は

のメンバに対し,

BVL  

の値が渡され

たときの動作は,未定義とする。

)

クラステンプレート

Q

%

P

P

3

P

Q

3

''

P&

33P

P&

33P

P&

33P

P&

P&

&

&

&

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

%

 &

 &

&

&

&

&

&

 &

''

+,(M(M(L

コンストラクタ・デストラクタ

PP

!

 &

XP &

''

+,(M(M(+

メンバ

3

P

!

&

P

!

P

!

 &

P

!

&

P

!

P

!

 &

P0

P0

 &

P

&

P

P

 &

''

+,(M(+(*

現地特性

0

 &

P

&

P

&

3

P &

P

!

 &

3

P

P0

 &

''

定義しない

P0

%

P0 &

''

定義しない

R&

R

)

のコンスト ラクタ

  /  (  0$

効果  

クラス

のオブジェクトを構築する。

を呼ぶことによって,メンバオブジェクトに初期値

を代入する。

効果  

クラス

))

)のオブジェクトを構築する。メンバオブジェクトは,初期化されない。構築さ

れたオブジェクトは,メンバ関数

を呼ぶことによって初期化しなければならない。初期化を行う前にオブジェ

クトが解体された場合の動作は,未定義とする。

.

参考

このデストラクタは,

を解体しない。

!

 / (  0$

事後条件  

この関数の事後条件を,

*

で定義する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

*

*

33 

の効果

要素

が空ポインタでない場合

,それ以外の場合は

1

Z

によって返される値のコピー。

$$

)

空ポインタ

$$

)

空ポインタ

)

メンバ関数

/( 0$

返却値  

このストリームバッファが制御する列に,

を用いて結びつけられた( 同期している)出力列。

/( 0$

 /(  0$

事後条件  

%%

返却値  

このメンバ関数実行前の

の値。

/( 0 $

返却値  

このストリームに関連づけられた

オブジェクトを指すポインタ。

/( 0 $

 / (  0 $

事後条件  

%%

効果  

を呼ぶ。

返却値  

このメンバ関数を実行する前の

の値。

EE

1M7N717O

現地特性

)

効果  

33 

)

)を呼ぶ。そして,

[%

.

のとき,

 V

)#

)を呼ぶ。

返却値  

このメンバ関数実行前の

33 

の値。

(

返却値  

  (

返却値  

  (

返却値  

指定された出力幅にするために使われる詰め物文字。

事後条件  

%%

返却値  

このメンバ関数実行前の

の値。

)

)

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

*

効果  

!

のメンバオブジェクトに,

の対応するメンバオブジェクトを代入する。ただし ,次に示す要件を満

たす。

及び

は,変更されない。

は,

(

を呼ぶことによって,最後に変更される。

及び

が指す配列の内容がコピーされる。ポインタそのものは,コピーされない。

!

中の新たに格納されたポインタ値が,

オブジェクト外に格納されているオブジェクトを指しており,

が解体される際にそれらのオブジェクトが解体されるとき,新たに格納されたポインタ値は,新たに構築された それ

らのオブジェクトのコピーを指すように変更される。

の要素をコピーする前に,登録されたコールバックの対

 ( 

が,

 ! 

 ( 

の形で呼ばれる。

以外の全要素が置き換えられた後,

からコピーされたコールバックのペアが

 ! 

 ( 

の形で呼ばれる。

参考

この

番目のパスによって,コピーされた

の値をゼロにすること,それの参照先の深いコピーを

行うこと,リファレンスカウンタの値を変更することなどの特別な動作が可能となる。

返却値  

!

)

%

フラグに関する関数

!$

返却値  

のとき空ポインタ。それ以外のとき,成功を表す空でないポインタ。

-

返却値  

返却値  

ストリームバッファのエラー状態。

!

,

事後条件  

[%

.

のとき,

%%

。それ以外のとき,

%%

1

33

効果  

0

  

%%

.

のとき,この関数から戻る。それ以外のとき,この関数は,

クラス

33

)

)のオブジェクト

を送出する。このオブジェクトが構築される際に

は,処理系定義の実引数が渡される。

!

効果  

1

を呼び出す。それが

33

)

)を送出するかもしれ

ない。

返却値  

%%

.

返却値  

中の

がセットされていれば

返却値  

中の

又は

がセットされていれば

返却値  

中の

がセットされていれば

これは,限りなくコピーが行われることを示唆する。しかし ,処理系は,最後の非ゼロ配列要素がどれであるかを抑えておける。

歴史的な慣習に従って

.&.

も検査する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

*

返却値  

にセットされる要素の中で,例外が送出されるものを決定するマスク。

!

事後条件  

%%

効果  

を呼び出す。

)#

操作子

)#

操作子

)

 )

効果  

(

33 

を呼び出す。

返却値  

)

 )

効果  

(

33 

を呼び出す。

返却値  

)

 )

効果  

(

33 

を呼び出す。

返却値  

)

 )

効果  

(

33 

を呼び出す。

返却値  

!

)

 )

効果  

(

33 

を呼び出す。

返却値  

)

 )

効果  

(

33 

を呼び出す。

返却値  

)

 )

効果  

(

33 

を呼び出す。

返却値  

)

 )

効果  

(

33 

を呼び出す。

返却値  

)

4 )

効果  

(

33 

を呼び出す。

返却値  

)

4 )

効果  

(

33 

を呼び出す。

返却値  

)

 )

効果  

(

33 

を呼び出す。

返却値  

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

*

)

 )

効果  

(

33 

を呼び出す。

返却値  

)

 )

効果  

(

33 

を呼び出す。

返却値  

)

 )

効果  

(

33 

を呼び出す。

返却値  

)#

/$

操作子

)

 )

効果  

(

33 

33

を呼び出す。

返却値  

)

 )

効果  

(

33 

33

を呼び出す。

返却値  

)

 )

効果  

(

33 

33

を呼び出す。

返却値  

)#

操作子

)

 )

効果  

(

33 

33

を呼び出す。

返却値  

)

 )

効果  

(

33 

33

を呼び出す。

返却値  

)

 )

効果  

(

33 

33

を呼び出す。

返却値  

)#

8$

操作子

)

 )

効果  

(

33 

33

を呼び出す。

返却値  

)

 )

効果  

(

33

33

を呼び出す。

返却値  

関数呼出し 情報

&

.'

は,関数呼出し 情報

.

'  

.'

.'

によっ

て呼び出すことが可能とする。これは,

$

に格納された書式フラグを変更する式

$

&

を許すためである。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

*

)#

スト リームバッファ

ヘッダ

の一覧

Q

%

P

P&

P

&

P

P

&

R

ヘッダ

は,文字の列に対する入出力を制御する型を定義している。

)#

スト リームバッファに対する要件

ストリームバッファは,その制御する列にさまざ まな制約を課すことが

できる。幾つかの例を次に挙げる。

制御する入力列を,読込み不可にする。

制御する出力列を,書出し不可にする。

制御する列を,外部ファイルのような,他形式で表現された文字の列に結び付ける。

制御する列に,結び付いた列に対する直接の入出力操作を提供する。

制御する列に,プログラムが列から文字を読む方法,列に文字を書く方法,入力列に文字を戻す方法,及

び ストリーム位置を変更する方法などに制限を設ける。

列は,

個のポインタによって特徴付けられる。それらのポインタは,空でないとき,同一の

配列オブジェ

クトの要素をそれぞれ指す。この配列オブジェクトは,常に,列から得た文字の( 部分)列を表す。列に対する操作

は,これらのポインタに格納された値の変更,結び付けられた列に対する直接の入出力 及び 必要に応じてストリー

ム位置 及び 変換状態

0

!

!

の変更などを行う。ここで規定する

個のポインタを次に示す。

開始ポインタ: 配列の先頭要素のアドレス(

(%

!

と呼ぶ )

次位置ポインタ: 次に読み書きが行われる要素のアドレス(

((

と呼ぶ)

終端ポインタ: 配列の最終要素の直後にあると想定される要素のアドレス(

と呼ぶ )

次に述べる意味の制約は,これらのポインタに対して,常に適用される。

((

が空ポインタでない場合,

(%

!

及び

は,

((

が指す

配列と同じ配列を指す非空ポイン

タでなければならない。

((

が空ポインタの場合,

(%

!

及び

は,空ポインタでなければならない。

((

が空ポインタでなく,出力列に対して

)

の場合,書出し位置

<

1

!

が使用

可能でなければならない。この場合,

!((

は,次に( 列に対する文字値の )書出しが行われる要素とし

て,代入可能でなければならない。

((

が空ポインタでなく,入力列に対して

1

の場合,書戻し位置

1 %

I

1

!

も使

用可能でなければならない。この場合,

((SVLT

は,定義済みの値をもち,入力列に対して次に書戻し

が行われるときに,文字が格納される要素でなければならない。

((

が空ポインタでなく,入力列に対して

)

の場合,読込み位置

3

1

!

も使用可

能でなければならない。この場合,

!((

は,定義済みの値をもち,その値は,次に列から読み込まれる

文字の値とする。

)#

クラステンプレート

Q

%

P

P

Q

3

''

P&

33P

P&

33P

P&

33P

P&

P&

XP

 &

''

+,(/(+(+(L

現地特性

0

 &

&

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

*

''

+,(/(+(+(+

バッファ管理 及び 位置決め

P

P

!

P

!

$

 &

P

P

P33

P33

%

P33

1

P33 &

P

P

P33

%

P33

1

P33 &

 &

''

読込み領域 及び 書出し領域

''

+,(/(+(+(*

読込み領域

$

P &

P

 &

P

 &

P

 &

$

P!

$

 &

''

+,(/(+(+(M

書戻し

P

P

 &

P

 &

''

+,(/(+(+(/

書出し領域

P

P

 &

$

P!

$

 &

3

&

''

+,(/(+(*(L

読込み領域へのアクセス

P!

&

P!

&

P!

&

 &

P!

P!

P!

 &

''

+,(/(+(*(+

書出し領域へのアクセス

P!

&

P!

&

P!

&

 &

P!

P!

 &

''

+,(/(+(M

仮想関数

''

+,(/(+(M(L

現地特性

0

 &

''

+,(/(+(M(+

バッファ管理 及び 位置決め

P

P

!

P!

$

 &

P

P

P33

P33

%

P33

1

P33 &

P

P

P33

%

P33

1

P33 &

 &

''

+,(/(+(M(*

読込み領域

$

 &

$

P!

$

 &

P

 &

P

 &

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

*#

''

+,(/(+(/(M

書戻し

P

P

%

33  &

''

+,(/(+(M(/

書出し領域

$

P!

$

 &

P

P

%

33  &

R&

R

クラステンプレート

は,各種のストリームバッファを派生させるために使わ

れる抽象基底クラスとする。ストリームバッファのオブジェクトは,次に示す

種類の文字の列を制御する。

文字入力列

文字出力列

( 欠番)

( 欠番)

)#

のコンスト ラクタ

効果  

のオブジェクトを構築し,次の初期化を行う。

すべてのポインタメンバを空ポインタにする。

メンバを,構築時の大域的現地特性

にコピーする。

参考

一度

メンバが初期化された後は,現地特性メンバ関数呼出しの結果 及び それによって得ら

れた特性項目のメンバは,次のメンバ

の呼出しまで,キャッシュしておいても問題ない。

.

効果  

なし 。

)#

の公開メンバ関数

)#

現地特性

)

事後条件  

%%

効果  

を呼び出す。

返却値  

このメンバ関数実行前の

の値。

返却値  

既に

が呼び出されたことがある場合には,

の最後の呼出し時に渡された実引数

の値を返す。そうでない場合,構築時に有効であった大域的現地特性

を返す。

が呼び出され,

それから戻る前に呼び出された場合( すなわち,

呼出しの中から呼び出された場合),

が呼び

出される前の値を返す。

)#

バッファ管理 及び 位置決め

/ (  0$

 $

(

'

返却値  

4

(

&&4

(

&&

,

&&

H

&&

返却値  

4

(

&&

,

&&

H

&&

返却値  

返却値  

.

.$%

の省略時コンストラクタが限定公開になっているのは,このクラスから派生したクラスのオブジェクトだけが構築

されることを保証するためである。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

*(

)#

読込み領域

'

!

返却値  

読込み位置が使用可能な場合,

V

を返す。それ以外の場合,

)#

)を

返す。

効果  

を呼び出す。

返却値  

33 

を返した場合,

33 

を返す。そうでない場合,

を返す。

返却値  

入力列の読込み位置が使用不可能な場合,

を返す。そうでない場合,

33

!  

を返し ,入力列の次位置ポインタを一つ進める。

返却値  

入力列の読込み位置が使用不可能な場合,

を返す。そうでない場合,

33

!  

を返す。

'

 $

(

'

返却値  

)#

書戻し

4

返却値  

入力列の書戻し位置が使用不可能な場合,又は

33

 SV

LT

が偽の場合,

33

  

を返す。そうでない場合,次位置ポインタを一つ戻し ,

33

!  

を返す。

返却値  

入力列の書戻し位置が使用不可能な場合,

を返す。そうでない場合,次位置ポインタを一つ戻

し ,

33

!  

を返す。

)##

書出し領域

返却値  

出力列の書出し位置が使用不可能な場合,

3

3

  

を返す。そうでない場合,

を出力列の次位置ポインタの位置に格納した後,次位置ポインタを一つ進め,

33

を返す。

'

$

(

'

返却値  

)#

%

%"

の限定公開メンバ関数

)#

読込み領域へのアクセス

$

4

返却値  

入力列の開始ポインタ。

$

返却値  

入力列の次位置ポインタ。

$

返却値  

入力列の終端ポインタ。

!

返却値  

入力列の次位置ポインタに

を加える。

!

 $

(

$

(

$

事後条件  

%%

%%

かつ

%%

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

*)

)#

書出し領域へのアクセス

$

返却値  

出力列の開始ポインタ。

$

返却値  

出力列の次位置ポインタ。

$

返却値  

出力列の終端ポインタ。

!

返却値  

出力列の次位置ポインタに

を加える。

!

 $

(

$

事後条件  

%%

%%

かつ

%%

)#

%

%"

の仮想関数

)#

現地特性

!

)

効果  

現地特性を浸透させて変換規則を変更する。

参考

派生クラスに対して,現地特性の変更が発生したことを通知するのに使われる。この関数が呼び出され

てから次にこの関数が呼ばれるまでの間,派生クラスは,現地特性関数呼出しの結果 及び それによって

抽出された特性項目のメンバをキャッシュしておくことができる。

省略時動作  

何も行わない。

)#

バッファ管理 及び 位置決め

$

 $

(

'

効果  

から派生したクラスごとに別途定められた操作(

))

及び

)

参照)を実行する。

省略時動作  

何も行わない。

を返す。

4

(

&&4

(

&&

,

&&

H

&&

効果  

ストリームバッファが制御する

個以上の列中で,ストリーム位置変更を,

から派生したク

ラスごとに定められた方法(

))

及び

)

参照)に基づいて実行する。

省略時動作  

VL  

を返す。

4

(

&&

,

&&

H

&&

効果  

ストリームバッファが制御する

個以上の列中で,

から派生したクラスごとに定められた方

法(

))

及び

)

参照)に基づいて,ストリーム位置変更を実行する。

省略時動作  

VL  

を返す。

効果  

制御される列と配列を同期させる。すなわち,

が空でない場合,

との間の文字が,

制御される列に書き出される。ポインタは,適切な状態にリセットされてよい。

返却値  

失敗した場合,

を返す。何が失敗であるかは,派生したクラス(

)

)ごとに定められる。

省略時動作  

を返す。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

*

)#

読込み領域

'

返却値  

列に含まれる文字数の推測値 又は

。この関数が正の値を返した場合,少なくともその個数の文字がスト

リームから取り出されるまで,

の呼出しは,

33 

を返さない。

を返した場合,

又は

の呼出しは,失敗する。

省略時動作  

ゼロを返す。

参考

33 

を用いる。

'

 $

(

'

効果  

最大

個の文字を,

から始まる連続した配列要素に代入する。代入される文字は,

を繰り返し呼び出す

ことによって,入力列から得られるものとする。代入は,

個の文字の代入が終了するか,

33 

を返した時点で終了する。

返却値  

代入された文字数。

参考

33 

を用いる。

参考

の公開メンバは,

がナルであるか,

%

である場合にだけ,

この仮想関数を呼ぶことができる。

返却値  

入力列の位置を進めることなく,

33

を返す。ここで,

は,未解決列の最初の文字

とする。未解決列がナルの場合,この関数は,失敗を表すために

33 

を返す。

文字の未解決列

1

3

!A

とは,次に挙げるものの連結を呼ぶ。

がナルでない場合,

から始まる

V

個の文字。それ以外の場合,空列。

%

入力列から読み込まれる( 空かもしれない)列。

結果の文字

!

は,次のとおりとする。

未解決列が空でない場合,未解決列の最初の文字。

%

未解決列が空の場合,入力列から読み込まれる次の文字。

バックアップ列

%

I 1

!A

は,次のとおりとする。

がナルの場合,空。

%

そうでない場合,

から始まる

V

個の文字

効果  

この関数は,

及び

を,次のとおりにセットする。

未解決列が空でない場合,

は,非ナルとなり,

から始まる

V

個の文字

は,未解決列内の文字となる。

%

未解決列が空の場合,

がナルになるか,

及び

が同じ非空ポインタとなる。

及び

がナルでない場合,この関数は,特別な制約を設けないが,次に示す通常のバックアップ条

件を適用する。

バックアップ列が,少なくとも

V

個の文字をもつ場合,

から始まる

V

個の文字は,バックアップ列の最後の

V

個の文字と等しい。

%

又は ,

V

から始まる

個の文字が,バックアップ列と等しい(ここで

は,バックアップ列の

長さとする。)

省略時動作  

33 

を返す。

要件  

結果の文字が,未解決列からバックアップ列に転送されること 及び 転送以前に,未解決列は,空ではないか

もしれないことを除き,制約条件は,

と同じとする。

省略時動作  

を呼び出す。

33 

を返した場合,

33 

を返す。そ

うでない場合,

33

!  

を返し ,入力列の次位置ポインタを一つ進める。

?

の形態素は

6?66

である。

?6

ではない。

$&%

又は

$%

は,時期尚早に例外を送出して失敗することがある。この意図は,呼出しが

%

を返さないことだけではな

く,呼出しから直ちに戻ることにある。

.

.$%

から派生したクラスは,基底クラスの定義を上書きすることによって,より効率の良い

(4

及び

($

の実装方法を提供することができる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

**

返却値  

失敗を表すため,

33 

を返す。

)#

書戻し

4

,

&&

参考

の公開関数は,

がナルである場合,

%%

である場合 又は

33

33

   SV

LT

が偽を返す場合に限って,この仮想関数を呼ぶこ

とができる。他の呼出しも,この制約条件を満たさなければならない。未解決列は,

と同様

に定義する。ただし,次のような違いがある。

33

 33

  

が真を返す場合,未解決列が決定される前に,入力

列が

文字分だけ書き戻される。

33

 33

  

が偽を返す場合,

が先頭に追加される。入力列が

文字戻されるか,又は 別の状態に変更されるかは,規定しない。

事後条件  

この関数から戻った時点で,

及び

に対する制約条件は,

の場合

に等しい。

返却値  

失敗を表すために,

33 

を返す。失敗が起きるのは,次に示す場合とする。

入力列を戻すことができない場合。

なんらかの原因によって,制約条件を満足するようにポインタを設定できない場合。

は,書戻しが本当に失敗した場合だけ呼び出される。成功を表すには,

33 

以外の値を

返す。

省略時動作  

33 

を返す。

)##

出力領域

'

$

(

'

効果  

高々

個の文字を出力列に書き出す。これは,繰り返し

を呼ぶのと等価とする。書き出す文字は,

で始まる連続した配列要素から得る。書出しが終了するのは,次のいずれかの場合とする。

文字の書出しが終了した場合

33 

を返した場合

返却値  

書き出した文字数。

!

,

&&

効果  

未解決列の先頭部にある文字の部分列を消費する。未解決列は,次に示すものの連結とする。

AG??

の場合,空列。そうでない場合,

で始まる

V

個の文字。

%

33

 33

  

が真を返す場合,空列。そうでない場合,

から構成される列。

参考

メンバ関数

及び

は,実引数として与えられた文字の列を書き出す余地が出力バッファ

に存在しなかった場合,この関数を呼び出す。

要件  

この仮想関数を上書きする定義は,次に挙げる制約に従わなければならない。

文字を消費することによる関連する出力列への影響は処理系定義とする。

(

を未解決列中の消費されていない文字の個数とする。

(

がゼロでないときは,

及び

は,

V

%%

(

であり,かつ

から始まる

(

個の文字は,将来,関連付けられた出力ス

トリームに出力しなければならない。

(

がゼロのとき( 未解決列中のすべての文字が消費されたとき)は,

AG??

に設定されるか,

及び

が同じ非

AG??

値でなければならない。

この関数は,関連する出力スト リームに対する文字追加に失敗した場合,及び

の規則に従うように

及び

を設定できなかった場合,失敗する。

返却値  

この関数が失敗した場合,

33 

を返すか,例外を送出する。そうでない場合,成功を表すため

33 

以外の値を返す。

省略時動作  

33 

を返す。

これは,

.

.$%

のインスタンスから派生した各クラス(

及び

)に対し ,文字の消費に伴う関連出力列へ

の影響についての仕様を与えなければならないことを意味する。プログラムで定義されたクラスに対しては,何の要件もない。

典型的には,

%

は,成功を表すために

を返す。ただし ,

=

/%

が真を返す場合には,

%

を返す。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

)(

書式制御 及び 操作子

ヘッダ

の一覧

Q

%

P

P&

P

&

P

P

&

%

P

P&

P

&

P

P

&

P

0

P

0

 &

R

ヘッダ

の一覧

Q

%

P

P&

P

&

P

P

&

P

0

P

0

 &

P

0

P

0

 &

P

0

P

0

 &

R

ヘッダ

の一覧

''

(((

は,実装によって定まる未規定の型とする。

P

3

3

 &

P33

 &

 &

 &

 &

 &

)(

入力スト リーム

ヘッダ

は,ストリームバッファからの入力を制御する二つの型 及び 一つの関

数呼出し情報を定義する。

)(

クラステンプレート

Q

%

P

P

3

P

Q

3

''

P

+,(M(M

)から継承した型

P&

33P

P&

33P

P&

33P

P&

P&

''

+,(-(L(L(L

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

P

P

!

 &

XP &

''

+,(-(L(L(+

前処理 及び 後処理

&

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

''

+,(-(L(+

書式付き入力

P

0

P

0

!

 P

 &

P

0

P

0

!

 P

0

  

&

P

0

P0

!

 P0  &

P

0

0

 &

P

0

0

 &

P

0

0

 &

P

0

0

 &

P

0

0

 &

P

0

0

 &

P

0

0

 &

P

0

0

 &

P

0

0

 &

P

0

0

 &

P

0

!0

 &

P

0

P

P

!

 &

''

+,(-(L(*

書式なし入力

$

&

P

 &

P

0

P0

 &

P

0

P!

$

 &

P

0

P!

$

P

 &

P

0

P

P

0

 &

P

0

P

P

0

P

 &

P

0

P

!

$

 &

P

0

P

!

$

P

 &

P

0

$

%

P

%

33  &

P

 &

P

0

P!

$

 &

$

P

!

$

 &

P

0

P

 &

P

0

 &

 &

P

 &

P

0

P &

P

0

P33

&

R&

''

+,(-(L(+(*

文字抽出テンプレート

P

0

P

0

0 &

P

0

P

0

0 &

P

0

P

0

0 &

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

P

0

P

0

! &

P

0

P

0

! &

P

0

P

0

! &

R

クラス

は,ストリームバッファによって制御される列からの読込み 及び 解釈を補助する多くのメ

ンバ関数呼出し情報を定義する。

上に呼出し情報を示した関数は,二つのグループに分かれる。一つは書式付き入力関数( 抽出子とも呼ぶ。)であり,

一つは書式なし入力関数である。それぞれは,前者は

 V

を呼出し ,後者は

 V 

呼び出して,入力文字を得る( 抽出する)

。これらの関数が,他のメンバ関数を呼び出すこともある。

 V

又は

 V 

33 

を返す場合,特に明示しない限り,入力関数は,

その動作を終了し ,

を実行する。この動作は,

33

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

入力関数内で呼ばれた関数が例外を送出した場合,特に明示しない限り,入力関数は,

をエラー状態にセッ

トする。

中で

がオンの場合,入力関数は,動作を終了せずに,その例外を再度送出する。そう

でない場合,例外を送出せず,呼び出した関数が失敗を表す値を返してリターンしたものとして,処理を続行する。

)(

のコンスト ラクタ

   /  (  0$

効果  

クラス

のオブジェクトを構築し ,基底クラスの初期値を

33 

)

の呼出しによって設定する。

事後条件  

%%

.

!

.

効果  

クラス

のオブジェクトを解体する。

参考

の操作は,どれも実行しない。

)(

クラス

33

Q

%

P

P

33

Q

P&

''

P&

説明のためだけ

3

P

0

%

 &

X &

Q

P&

R

3

0 &

''

定義しない

0

%

0 &

''

定義しない

R&

R

クラス

は,例外安全な前置操作 及び 後置操作を行うのに用いる。

 / (  0)

(

4

,

効果  

の場合,書式付き入力 又は 書式なし入力の準備を行う。最初に,

が空ポインタ

でない場合,この関数は,出力列と関連した外部

"

ストリームとの同期をとるために,

( V

を呼び

出す。ただし,

の出力領域が空の場合,この呼出しを省略することができる。更に,処理系は,この

の呼出しを,

V V

が呼び出されるまで延期してもよい。

オブジェクトが破棄されるま

で,そのような呼出しが行われなかったときは,

の呼出しが全く行われないこともある。

これが可能なのは,標準ライブラリに含まれる関数だけとする。利用者のプログラムコード 中で用いるコンストラクタの意味は,規定

ど おりとする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

#

がゼロであって,

0

33

がゼロでない場合,この関数は,次の入力文字

が 空白類文字である限り,文字を取り出し て破棄する。

( V

又は

( V

33 

を返す場合,この関数は,

1

を呼び出す(それが

33

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

参考

コンストラクタ

0

%

は,現在

に登録されている現地特性を用いて,次の入力文字が空白類文字であるかど うかを判定する。

文字

が空白類文字であるかど うかを判定するため,このコンストラクタは,次のプログラムコード と同じ効果を

もつ。

0

%

P

(  &

(

(

 [

%. 

''

は空白類文字

準備完了後,

の場合,

[%

となる。それ以外の場合,

%%

とする。準備の

間に,コンストラクタは,

を呼び出すかもしれない(それが

33

を送出するか

もしれない。)

参考

この参考は,

1

によって削除された。

.

効果  

なし 。

返却値  

を返す。

)(

書式付き入力関数

)(

共通の要件

すべての書式付き入力関数は,クラス

のオブジェクトを構築することによって実

行を開始する。その際,第

実引数

にしてコンストラクタを呼び出す。

オブジェクトが,

%

型の値に変換されたときに

を返す場合,書式付き入力関数は,要求された入力処理の実行を開始する。入

力処理の実行中に例外が送出されたときは,

!

のエラー状態中の

33

がオンになる。

この際,

 0

 [

%

.

であれば ,その例外は再送出される。ど のような場合でも,入力関数は,

オブジェクトを解体する。例外が送出されなかった場合,入力関数は

!

を返す。

)(

算術抽出子

00 )

!

00

)

!

00 )

!

00

)

!

00 )

!

00

)

!

00 )

!

00 )

!

00

)

!

00 )

!

00 !$)

!

挿入子の場合と同様,これらの抽出子は,入力ストリームデータを構文解析する際,現地特性の

オブジェクトに依存する。これらの抽出子は,

)(

で規定される)書式付き入力関数として動作する。

オブジェクトが構築された後,変換は,次のプログラムコード と同じ効果をもつ。

P

P

&

%

.&

P

 (! 

 &

 &

上のプログラムコード で,

は,クラス

の非公開メンバを表す。

のコンストラクタ 及び デストラクタは,処理系依存操作を追加して実行することができる。

これは,

%$

を送出しないで行われる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

参考

最初の実引数は,入力ストリームを指す反復子のクラス

のオブジェクトを提供

する。それは,入力ストリームを経由せずに,ストリームバッファを直接用いる。

クラス

は,

へのインタフェースとして,この型に依存する。したがって,クラス

は,

に直接依存することはない。

)(

33

/( 0)

00

 /( 0)

 $ /(  0) 

効果  

この抽出子は,

)(

で規定される)書式付き入力関数としては動作しない。

返却値  

/( 0)

00

 /(0)

 $ /( 0) 

効果  

を呼び出す。この抽出子は,

)(

で規定される)書式付き入力関数としては動作しない。

返却値  

!

/( 0)

00

 )

 $ )

効果  

を呼び出す。

この抽出子は,

)(

で規定される)書式付き入力関数としては動作しない。

返却値  

!

/

(

0

/( 0)

00  / (  0)

(

$

/

0

/(0 )

00 /  (  0)

(

$

/

0

/(0 )

00 /  (  0)

(

$

効果  

の(

)(

で規定される)書式付き入力関数として動作する。

オブジェクトが構築された後,

は,文字を繰返し 取り出して順次配列に格納していく。配列の先頭位置は,

で示される。格納される

文字数の最大値

は,次のとおりに定義する。

がゼロより大きい場合,

%%

そうでない場合,

は,文字列の終わりを表す

を格納可能な

配列の最大要素数。

文字の抽出は,次の条件が起こるまで続けられる。

個の文字が格納された。

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

次の入力文字

について,

(( 

が真である。ただし ,

は,

(  

とする。

次に,

は,ナルバイト(

)を次の位置に格納する。

文字も抽出されなかった場合,先頭の位

置かもしれない。

最後に,

は,

を呼び出す。

文字が

文字も抽出されなかった場合,この演算子は,

を呼び出す。それが

33

)

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

返却値  

例えば,

.

'

)の呼出し情報を見よ。

例えば,

&

.'

)の呼出し情報を見よ。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

##

/

(

0

/( 0)

00  / (  0)

(

)

/

0

/(0 )

00 /  (  0)

(

)

/

0

/(0 )

00 /  (  0)

(

)

効果  

の(

)(

で規定される)書式付き入力関数として動作する。

オブジェクトが構築された後,

抽出する文字がある場合,その

文字が取り出されて

に格納される。そうでない場合,

(

呼び出す。

返却値  

/( 0)

00

 /( 0 $

効果  

)(

で規定される)書式付き入力関数として動作する。

がナルの場合,

を呼

び出す。それが

33

)

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

オブジェクトが構築された後,こ

の演算子は,

!

から文字を繰り返し抽出し,

によって制御される出力列に挿入する。文字の抽出 及び 挿入は,

次の条件が成立するまで続けられる。

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

出力列に対する挿入に失敗した(この場合,挿入されるはずだった文字は,抽出されない。)

例外が発生した(この場合,例外は,捕そくされる。)

この演算子が

個も文字を挿入しなかった場合,

を呼び 出す。それが

33

)

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

個も挿入しなかった原因が

から文字を抽出している間に発生した

例外を捕そくしたことによっていて,かつ

中の

がオンの場合,補そくした例外が再度送出さ

れる。

返却値  

!

)(

書式なし入力関数

書式なし入力関数は,実行を開始するときに,省略時の第

実引数

にしたコンストラクタを呼び出すことによって,クラス

のオブジェクトを構築する。

オブジェクトが,

%

型の値に変換されたときに

を返す場合,書式なし入力関数は,要求された入力処理の実行を開始する。入力

処理の実行中に例外が送出された場合,

!

のエラー状態中の

33

がオンになる(

33 

から送出された例外は,補そくも再送出もされない。)

 0

[%

.

の場合,その例外は,再送出される。書式なし入力関数は,抽出した文字数を数え

る。例外が送出されなかった場合,書式なし入力関数は,数えた文字数をメンバオブジェクトに格納し ,規定の値を

返す。どのような場合でも,

オブジェクトは,書式なし入力関数から戻る前に解体される。

'

効果  

なし 。このメンバ関数は,

)(

の第

段落で規定される)書式なし入力関数としては動作しない。

返却値  

書式なし入力メンバ関数を最後に呼び出したとき抽出された文字数。

効果  

)(

の第

段落で規定され る )書式なし 入力関数とし て動作する。

オブジェクトの構築後,

抽出すべき文字

が存在する場合,それを抽出する。そうでない場合,

を呼び 出す。それが

33

)

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

返却値  

文字

が抽出できたらの場合

,それ以外の場合

33 

/( 0)

 )

効果  

)(

の第

段落で規定される)書式なし入力関数として動作する。

オブジェクトの構築後,抽

出すべき文字が存在するなら,それを取り出して

に代入する。

これは,

%$

を送出しないで行われる。

この関数は,型

4&

?

及び

$4&

?

については,多重定義されない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#(

そうでない場合,

を呼び出す。それが

33

)

)を送出するかもしれ

ない。

返却値  

!

/( 0)

 $

(

'

(

効果  

)(

の第

段落で規定される)書式なし入力関数として動作する。

オブジェクトの構築後,文

字を繰返し抽出し ,配列に順次格納していく。この配列の先頭位置は,

で示される。

文字の抽出 及び 格納は,次の条件が発生するまで続けられる。

個の文字が格納された。

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

が呼び出される)

次の入力文字

について,

%%

である(この場合,

は,抽出されない)

この関数が

個も文字を格納しなかった場合,

が呼び出される。それが

33

)

)を送出するかもしれない。どのような場合でも,この関数は,配列中の次に格納が行われる要素にナル文

字を格納する。

返却値  

!

/( 0)

 $

(

'

効果  

  Z

4Z

  

を呼び出す。

返却値  

その呼出しが返す値。

/( 0)

 / (  0 )

(

効果  

)(

の第

段落で規定される)書式なし入力関数として動作する。

オブジェクトの構築後,文字

を繰返し抽出し,

が制御する出力列に挿入する。文字の抽出 及び 挿入は,次に示す条件が起こるまで続けられる。

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

出力列に対する挿入が失敗した(この場合,挿入されるはずだった文字は,抽出されない。)

次の入力文字

について,

%%

である(この場合,

は抽出されない。)

例外が発生した(この場合,例外は,捕そくされるが,再送出されない。)

この関数が

文字も挿入しなかった場合,

が呼び出される。それが

33

)

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

返却値  

!

/( 0)

 / (  0 )

効果  

  Z

4Z

  

を呼び出す。

返却値  

その呼出しが返す値。

/( 0)

 $

(

'

(

効果  

)(

の第

段落で規定される)書式なし入力関数として動作する。

オブジェクトの構築後,文

字を繰返し抽出し ,配列に順次格納していく。この配列の先頭位置は,

で示される。

文字の抽出 及び 格納は,次に示す条件が起こるまで続けられる。

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

が呼び出される。)

次の入力文字

について,

%%

である(この場合,

は抽出されるが,格納されない。)

個の文字を格納した(この場合,

が呼び出される)

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

この関数は,型

4&

?

及び

$4&

?

については,多重定義されない。

この関数は,型

4&

?

及び

$4&

?

については,多重定義されない。

最後の入力文字は,

抽出

される。したがって,この文字は,格納されないにもかかわらず,

4$

で数えられる。

これは,

%.

をセットしないで,バッファと同じ大きさの入力行を読み込むことを許す。この動作は,歴史的な

1@1

の処理系

とは異なっている。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#)

この関数が

文字も抽出しなかった場合,

が呼び出される。それが

33

)

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

どのような場合でも,この関数は,配列中の次に格納が行われる要素にナル文字(

)を格納する。

返却値  

!

Q

&

PP$

%

L..&

SP

P

$

T

&

P

%

.&

(

PP$ 

Z4Z 

11

(  

Q

%

( &

(  

YC

Y&

''

は偽

(  

Q

YC

Y&

((

0

X33 &

R

Q

VV&

''

改行を数えない

Y?

Y

))P&

R

Y

Y

Y

 3

Y

&

R

R

/( 0)

 $

(

'

返却値  

 

Z4

Z

  

/( 0)

 '

,

(

,

&&

効果  

)(

の第

段落で規定される)書式なし入力関数として動作する。

オブジェクトの構築後,文

字を繰返し抽出し ,抽出した文字を捨てる。文字の抽出は,次に示す条件が起こるまで続けられる。

[%

$

33

)の場合,

個の文字が抽出される。

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

が呼び出される。それが

33

)

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

次の入力文字

について,

%%

である(この場合,

は抽出される。)

参考

最後の条件は,

%%

33 

の場合には,発生しない。

返却値  

!

4

効果  

)(

の第

段落で規定される)書式なし入力関数として動作する。

オブジェクトの構築後,現

在の入力文字を読むが,抽出しない。

返却値  

が偽の場合,

33 

,それ以外の場合,

 V 

/( 0)

 $

(

'

効果  

)(

の第

段落で規定され る )書式なし 入力関数とし て動作する。

オブジェクトの構築後,

の場合,

を呼び出して(それが例外を送出するかもしれない。)から,戻る。それ以外

の場合,文字を繰返し抽出し ,この配列に順次格納していく。この配列の先頭位置は,

で示される。

文字の抽出 及び 格納は,次に示す条件が起こるまで続けられる。

個の文字が格納された。

これは,空入力行によって,

%.

がセットされないことを意味する。

この関数は,型

4&

?

及び

$4&

?

については,多重定義されない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

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

1

が呼び出される。それが

33

)

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

返却値  

!

'

 $

(

'

効果  

)(

の第

段落で規定され る )書式なし 入力関数とし て動作する。

オブジェクトの構築後,

の場合,

を呼び出して(それが例外を送出するかもしれない。)から,戻る。それ以外の

場合,文字を繰返し抽出し,配列に順次格納していく。この配列の先頭位置は,

で示される。

 V

%%

VL

の場合には,

を呼出し( それが

33

)

)を送出するかもしれな

い。),

文字も抽出しない。

 V

%%

.

の場合,

文字も抽出しない。

 V

.

の場合,

 V

  

  

文字抽出する。

返却値  

抽出された文字数。

/( 0)

4

効果  

)(

の第

段落で規定している)書式なし 入力関数として動作する。

オブジェクトの構築後,

の場合,

を呼び出して(それが例外を送出するかもしれない。)から,戻る。

ナルでない場合,

 V

を呼び出す。

がナルであるか,

33 

を返す場合,

を呼び出す。それが

33

)

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

参考

この関数は,文字を抽出しないので,次に

を呼び出したときの返却値は,

となる。

返却値  

!

/( 0)

効果  

)(

の第

段落で規定され る )書式なし 入力関数とし て動作する。

オブジェクトの構築後,

の場合,

を呼び出して(それが例外を送出するかもしれない。)から,戻る。

がナルでない場合,

 V

を呼び出す。

がナルであるか,

33 

返す場合,

を呼び出す。それが

33

)

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

参考

この関数は,文字を抽出しないので,次に

を呼び出したときの返却値は,

となる。

返却値  

!

効果  

)(

の第

段落で規定され る )書式なし 入力関数とし て動作する。

オブジェクトの構築後,

が空ポインタの場合,

を返す。それ以外の場合,

 V

を呼び出す。その関数が

返した場合,

を呼び出し( それが

33

)

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

た後,

を返す。それ以外の場合,ゼロを返す。

効果  

)(

の第

段落で規定される)書式なし入力関数として動作する。ただし ,この関数は,抽出された

文字数を数えず,以後の

の呼出しに影響を与えない。

返却値  

オブジェクトの構築後,

[%

の場合,失敗を表すために

VL 

を返す。そう

でない場合,

 V

を返す。

/( 0)

4

効果  

)(

の第

段落で規定される)書式なし入力関数として動作する。ただし ,この関数は,抽出された

文字数を数えず,以後の

の呼出しに影響を与えない。

オブジェクトの構築後,

[%

場合,

 V

を実行する。失敗した場合,この関数は,

を呼び出す。そ

れが

33

)

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

返却値  

!

/( 0)

4 )

(

&&4

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#*

効果  

)(

の第

段落で規定される)書式なし入力関数として動作する。ただし ,この関数は,抽出された

文字数を数えず,以後の

の呼出しに影響を与えない。

オブジェクトの構築後,

[%

場合,

 V

を実行する。

返却値  

!

)(

の標準操作子

5

/

(

0

/( 0)

 /(  0)

6

効果  

次の文字

が空白類文字である限り,列中に文字がなくなるまで,文字を抽出し続ける。空白類文字は,

33

)(

)と同じ条件で判別される。抽出する文字がなくなったことによって

が文字の抽出

を停止した場合,

をセットする。しかし,

は,セットしない。

返却値  

)(#

クラステンプレート

Q

%

P

P

3

P

P

Q

3

''

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

P

P

!

 &

XP 

&

R&

R

クラス

は,ストリームバッファによって制御される列に対する入出力を可能にする多くの関数を

継承している。

)(#

のコンスト ラクタ

   /  (  0$

効果  

クラス

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

)(

)及び

)(

)を呼ぶことによって,基底クラスの初期化を行う。

事後条件  

 %%

かつ

 %%.

)(#

のデスト ラクタ

!

.

効果  

クラス

のオブジェクトを解体する。

参考

に対しては,何の操作も行わない。

)(

出力スト リーム

ヘッダ

は,ストリームバッファに対する出力を制御する,型 及び 関数呼出し

情報を定義する。

)(

クラステンプレート

Q

%

P

P

3

P

Q

3

''

P

+,(M(M

)から継承した型

P&

33P

P&

33P

P&

33P

P&

P&

''

+,(-(+(+

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

P

P

P

!

 &

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

XP 

&

''

+,(-(+(*

前処理 及び 後処理

&

''

+,(-(+(/

書式付き出力

P

0

P

0

! P

0

  

&

P

0

P

0

! P

 &

P

0

P0

! P0  

&

P

0

 &

P

0

 &

P

0

 &

P

0

 &

P

0

 &

P

0

 &

P

0

 &

P

0

 &

P

0

 &

P

0

 &

P

0

!

 &

P

0

P

P

!

 &

''

+,(-(+(-

書式なし出力

P

0

P

 &

P

0

P!

$

 &

P

0

 &

''

+,(-(+(M

シーク

P

 &

P

0

P &

P

0

P33

&

R&

''

+,(-(+(/(M

文字挿入子

P

0

P

0

 &

P

0

P

0

 &

''

特殊化

P

0

P

 &

''

符号付き 及び 符号なし

P

0

P

 &

P

0

P

P

0

P

0

! &

P

0

P

0

! &

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

''

部分特殊化

P

0

P

! &

''

符号付き 及び 符号なし

P

0

P

! &

P

0

P

! &

R

クラス

は,ストリームバッファによって制御される列への書出し 及び 書式制御を助ける多くのメ

ンバ関数呼出し情報を定義している。

上に呼出し情報を示した関数は,二つのグループに分かれる。一つは書式付き出力関数( 挿入子とも呼ぶ。)であ

り,一つは書式なし出力関数である。これらの出力関数は,

 V

を呼ぶ出して文字を出力す

る( 挿入する)。これらの関数が,他の

公開メンバ関数を呼び出すこともある。ただし ,

以外の)仮想メンバを呼び出すことはない。

出力関数内で呼ばれた関数が例外を送出した場合,特に明示する場合を除き,出力関数は,

をエラー状態に

セットする。

中の

がオンの場合,出力関数は,動作を完了せずにその例外を再送出する。そ

うでない場合,例外を送出することはせず,エラーとして扱う。

)(

のコンスト ラクタ

   /  (  0$

効果  

クラス

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

33 

)

)を呼

び出して,基底クラスに初期値を設定する。

事後条件  

%%

!

.

効果  

のオブジェクトを解体する。

参考

に対する操作を実行しない。

)(

クラス

33

Q

%

P

P

33

Q

''

P&

説明のためだけ

3

P

0

 &

X &

Q

P&

R

3

0 &

''

定義しない

0

%

0 &

''

定義しない

R&

R

クラス

は,例外に対して安全な前置操作 及び 後置操作の実行に責任をもつクラスを定義する。

 / (  0)

効果  

が非ゼロの場合,書式付き出力 又は 書式なし出力の準備を行う。

が空ポインタでない

場合,

(V 

を呼び出す。

準備終了後,

の場合,

%%

となる。それ以外の場合,

%%

とする。準備の

間,このコンストラクタは,

を呼び出してもよい(それが

33

)

)を

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

同期を取る必要がないと判断できる場合,

06%$?

を呼び出す必要はない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

#

.

効果  

0

33 

00

[

  

の場合,

を呼び

出す。

効果  

を返す。

)(

のシークメンバ

返却値  

[%

の場合,失敗を表すために

VL 

を返す。それ以外の場合,

 V

を返す。

/( 0)

4 )

効果  

[%

の場合,

 V

を実行する。失敗した場合,

呼び出す(それが

33

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

返却値  

!

/( 0)

4 )

(

&&4

効果  

[%

の場合,

 V

を実行する。

返却値  

!

)(#

書式付き出力関数

)(#

共通の要件

すべての書式付き出力関数は,実行の最初にクラス

のオブジェクトを構築する。こ

のオブジェクトが,

%

型の値に変換されたときに

を返す場合,書式付き出力関数は,要求された出力の生成を

開始する。出力の生成が失敗した場合,書式付き出力関数は,

33

を実行する。それが例外を

送出するかもしれない。出力中に例外が送出された場合,

!

のエラー状態中の

33

がオンになる。

そのとき,

 0

 [%

.

であれば ,その例外は,再送出される。例外の有無にかかわらず,出力

関数は,終了前に

オブジェクトを解体する。例外が送出されなかった場合,出力関数は,

!

を返す。

個々の出力関数の定義では,出力の処理方法だけを示し ,

オブジェクトについては触れない。

)(#

算術挿入子

//

!

//

!

//

!

//

!

//

!

//

!

//

!

//

!

//

!

//

!

//

!$

!

効果  

現地特性に依存した数値の書式制御 及び 構文解析は,クラス

及び クラス

が処理する。

これらの挿入子関数は,数値書式制御に設定された現地特性値を用いる。これらの挿入子は,

)(#

で規定され

る)書式付き出力関数として動作する。

オブジェクトの構築の後,次に示すプログラムコード を実行したの

と同じ効果をもつ変換を行なう。

%

P

P

P

  (

  

 (

 &

のコンストラクタ 及び デストラクタは,処理系依存の処理を行うことができる。

%$

を送出しない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

の第

実引数は,クラス

( クラス

のための反復子クラス)のオブ

ジェクトを渡すのに使われる。この反復子は,

を経由せずに

を直接用いる。クラス

は,

この型を通じて

へのインタフェースをとる。つまり,柔軟性を考えて,

に対する直接の依存関係

を抽象化してある。

の第

実引数は,型

の基底サブオブジェクトに対する参照とする。これは,出力幅

などの書式指定を提供し,他の特性項目を得るための現地特性を提供する。

が真の場合,

を実行して(それが例外を送出するかもしれない。)から戻る。

返却値  

!

)(#

33

/( 0)

//

 /( 0)

 $ /(  0) 

効果  

なし 。

)(#

で規定される)書式付き出力関数としては動作しない。

返却値  

/( 0)

//

 /(0)

 $

 /( 0) 

効果  

を呼び出す。この挿入子は,

)(#

で規定される)書式付き出力関数としては動作しない。

返却値  

!

/( 0)

//

 )

 $

 )

効果  

を呼び出す。この挿入子は,

)(#

で規定される)書式付き出力関数としては動作しない。

返却値  

!

/( 0)

//

 /( 0 $

効果  

)(#

で規定される)書式付き出力関数として動作する。

オブジェクト構築後,

がナルの場

合,

を呼び出す。それが

33

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

から文字を繰り返し取り出し ,

!

に挿入する。

からの文字の抽出 及び 挿入は,次に示す条件のいずれか

が発生するまで繰り返される。

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

出力列への挿入が失敗した(この場合,挿入されるはずだった文字は,抽出されない)

からの文字取得中に例外が発生した。

この関数が,

文字も文字を挿入しなかった場合,

が呼び出される(それが

33

)

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

。文字の抽出中に例外が送出された場合,この関数は,

をエラー状態

にセットする。そして,

内の

がオンの場合,捕そくした例外を再送出する。

返却値  

!

)(#

文字挿入子の関数テンプレート

/

(

0

/( 0)

//  / (  0)

(

/

(

0

/( 0)

//  / (  0)

(

特殊化

/

0

/(0 )

// /  (  0)

(

例えば,関数呼出し情報

&.

'

)を参照せよ。

例えば,関数呼出し情報

&

.'

)を参照せよ。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

符号付き 及び 符号なし

/

0

/(0 )

// /  (  0)

(

/

0

/(0 )

// /  (  0)

(

効果  

の(

)(#

で規定される)書式付き挿入子として動作する。

オブジェクトの構築後,文字を

挿入する。

が型

であって,ストリームの文字型が

でない場合,挿入される文字は,

とす

る。それ以外の場合,

が挿入される。

詰め物は,

の規定に従い決定する。この場合,

が呼び出される。挿入文字 及び 必要な詰め

物が,

に挿入される。

返却値  

/

(

0

/( 0)

//  / (  0)

(

$

/

(

0

/( 0)

//  / (  0)

(

$

/

0

/(0 )

// /  (  0)

(

$

/

0

/(0 )

// /  (  0)

(

$

/

0

/(0 )

// /  (  0)

(

$

要件  

は,ナルであってはならない。

効果  

の(

)(#

で規定される)書式付き挿入子として動作する。

オブジェクトの構築後,文字を

挿入する。挿入される文字は,

から始まり,その文字数は,

33 

とする。詰め物は,

規定に従い決定する。

から始まる

33 

個の文字は,

(

)

)を用いてワイド 文字化

される。ワイド 化された文字 及び 必要な詰め物が

に挿入される。

を呼び出す。

返却値  

)((

書式なし出力関数

すべての書式なし 出力関数は,実行の最初にクラス

のオブジェクトを構築す

る。

オブジェクトが,

%

型の値に変換されたときに

を返す場合,書式付き出力関数は,要求された出

力の生成を開始する。出力中に例外が送出された場合,

!

のエラー状態中の

33

がオンになる。

この際,

 0

 [

%

.

であれば,その例外は,再送出される。例外の有無にかかわらず,書式なし

出力関数は,終了前に

オブジェクトを解体する。例外が送出されなかった場合,各出力関数で規定された値

を返す。

/( 0)

効果  

)(

の第

段落で規定される)書式なし出力関数として動作する。

オブジェクトの構築後,可

能ならば ,文字

を挿入する。

そうでない場合,

を呼び 出す。それが

33

)

)を送出するかもしれ

ない。

返却値  

!

)

$

(

'

挿入が

?

のストリームに対して行われる場合,

&

は,通常

となる。

%$

を送出しない。

この関数は,

4&

?

及び

$4&

?

型に対しては,多重定義されない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

##

効果  

)(

の第

段落で規定される)書式なし出力関数として動作する。

オブジェクトの構築後,先

頭要素が

で示される配列から,文字を繰返し抽出して挿入する。

挿入は,次に示す条件のいずれかが起きるまで続けられる。

個の文字が挿入された。

出力列に対する挿入が失敗した(この場合,この関数は,

を呼び出す。それが

33

)

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

返却値  

!

)

効果  

が空ポインタでない場合,

を呼び出す。この関数が

VL

を返した場合,

を呼び 出す。それが

33

)

)を送出するかもしれない。この関数は,

)((

で規定される)書式なし出力関数としては動作しない。

返却値  

!

)()

の標準操作子

5

/

(

0

/( 0)

 /(  0)

6

効果  

((

Z4

Z

  

を呼び出した後,

を呼び出す。

返却値  

5

/

(

0

/( 0)

 /(  0)

6

効果  

(  

を呼び出す。

返却値  

5

/

(

0

/( 0)

 /(  0 )

6

効果  

を呼び出す。

返却値  

)(

標準操作子

ヘッダ

は,クラス

及び その派生クラスの保持する情報を変更する機能

を挿入子 及び 抽出子に提供するために用いる型 及び それを用いる関数を定義する。

ここで定義する関数記述中で

#

と書き表す型は,処理系依存の型とする。

#

は,関数ごとに異なるか

もしれない。

 &&  

4

返却値  

次に示す性質をもつ,未規定の型のオブジェクト

のインスタンスの場合,式

は,

が呼ばれたとして動作する。

のインスタンスの場合,式

は,

が呼ばれたとして動作する。

ここで,

は,次のとおりの関数とする。

  

この関数は,

4&

?

及び

$4&

?

型に対しては,多重定義されない。

$

&

を実行することによる効果は,改行文字を

$

によって制御される出力列に挿入し ,その後,それと関連しているで

あろう外部ファイルと同期を取ることにある。

%4

.C

は,

オブジェクト

内に格納された書式フラグ中の

.C

クリアする。式

$

%4

.?.

は,

オブジェクト

$

内に格納された

.?.

をクリアする(

$

?.

に同じ 。)

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#(

P0

P0

P33

Q

''

指定したフラグをリセットする

(P

33

.

  

 &

&

R

の型は,

0

とし,その値は

とする。式

の型は,

0

とし,その値は

とする。

 &&  

4

返却値  

次に示す性質をもつ,未規定型のオブジェクト

のインスタンスの場合,式

は,

が呼ばれたとして動作する。

のインスタンスの場合,式

は,

が呼ばれたとして動作する。

ここで,

は,次のとおりの関数とする。

P0

P0

P33

Q

''

指定したフラグをセットする

( &

&

R

の型は,

0

とし,その値は

とする。式

の型は,

0

とし,その値は

とする。

返却値  

次に示す性質をもつ,未規定型のオブジェクト

のインスタンスの場合,式

は,

が呼ばれたとして動作する。

のインスタンスの場合,式

は,

が呼ばれたとして動作する。

ここで,

は,次のとおりの関数とする。

P0

P0

Q

''

基数をセットする

(

%%

N

2

P33

3

%%

L.

2

P33

3

%%

L-

2

P33

3

P33

P33

&

&

R

の型は,

0

とし,その値は

とする。式

の型は,

0

とし,その値は

とする。

返却値  

次に示す性質をもつ,未規定型のオブジェクト

( 又は その派生型)のインスタンスであり,

が型

の場

合,式

は,

が呼ばれたとして動作する。

ここで,

は,次のとおりの関数とする。

0

P

0

Q

''

詰め物文字をセットする

( &

&

R

の型は,

0

とし ,その値は

とする。

返却値  

次に示す性質をもつ,未規定型のオブジェクト

のインスタンスの場合,式

は,

が呼ばれたとして動作する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#)

のインスタンスの場合,式

は,

が呼ばれたとして動作する。

ここで,

は,次のとおりの関数とする。

P0

P0

Q

''

精度をセットする

( &

&

R

の型は,

0

とし,その値は

とする。式

の型は,

0

とし,その値は

とする。

返却値  

次に示す性質をもつ,未規定型のオブジェクト

のインスタンスの場合,式

は,

が呼ばれたとして動作する。

のインスタンスの場合,式

は,

が呼ばれたとして動作する。

ここで,

は,次のとおりの関数とする。

P0

P0

Q

''

出力幅をセットする

( &

&

R

の型は,

0

とし,その値は

とする。式

の型は,

0

とし,その値は

とする。

))

文字列に基づくスト リーム

ヘッダ

は,ストリームバッファをクラス

のオブジェク

トに関連付けるための,

個のクラステンプレート 及び

個の型を定義する。

ヘッダ

の一覧

Q

%

P

6

%

P&

P

&

P

P

&

%

P

6

%

P

&

P

&

P

P

&

%

P

6

%

P

&

P

&

P

P

&

%

P

6

%

P

&

P

&

P

P

&

R

))

クラステンプレート

%

P

6

%

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

P

3

P

3

P&

33P

P&

33P

P&

33P

P&

P&

''

+,(,(L(L

コンストラクタ

P

P

3

3

%

P33

1

P33 &

P

P

6

0

P33

%

P33

1

P33 &

''

+,(,(L(+

文字列の入力 及び 出力

P

 6

&

P

6

0

 &

3

''

+,(,(L(*

上書きされた仮想関数

P

 &

P

P

%

33  &

P

P

%

33  &

P

!

$ &

P

P

P33

P33

%

P33

1

P33 &

P

P

P33

%

P33

1

P33 &

3

''

P33

#

 &

説明のためだけ

&

クラス

は,

の派生クラスであり,入力列 及び 出力列を,任意の文字の列と

関連させるために用いる。この列は,

オブジェクトからの初期化 及び クラス

オブジェ

クトへの変換が可能とする。

説明のため,このクラスが保持するデータを次に示す。

33

#

これは,入力列からの読込みが可能な場合に

がセットされ,出力列への書

出しが可能な場合に

がセットされる。

))

のコンスト ラクタ

  &&  

,

&&

H

&&

効果  

のオブジェクトを構築し ,その基底クラスを

)#

)で初期化し,

#

で初期化する。

参考

この関数は,配列オブジェクトを割り付けない。

/( (:   0)

(

&&

,

&&

H

&&

効果  

のオブジェクトを構築し ,その基底クラスを

)#

)で初期化し,

#

で初期化する。次に,

の内容を

に基礎とする文字列にコピーし ,入力列 及び

出力列を

に従って初期化する。

0

33

が真の場合,出力列を基礎とする文字列で初期化す

る。

0

33

が真の場合,入力列を基礎とする文字列で初期化する。

事後条件  

%%

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#*

))

メンバ関数

/( (:  0

返却値  

に基礎とする文字列に等しい

のオブジェクト。バッファが入力モードだけ

で構築された場合,基礎とする文字列は,入力列に等しい。そうでない場合,基礎とする文字列は,出力列に等しい。

基礎とする列が空の場合,この関数は,

 6

を返す。

!

/( (:  0 )

効果  

に基礎とする文字列が空でない場合,それを解放する。その後,

の内容を

に基礎とする文字列にコピーし ,入力列 及び 出力列を,

オブジェクトが構築された際に格納した

モード に従って初期化する。

#

 0

33

が真の場合,出力列を基礎とする文字列で初期化する。

#

 0

33

が真の場合,入力列を基礎とする文字列で初期化する。

事後条件  

%%

))

上書きされた仮想関数

返却値  

入力列の読込み位置が使用可能の場合,

33

!  

を返す。それ以外の場合,

33 

を返す。

4

,

&&

効果  

次に示す

種類の方法のいずれかによって,可能ならば ,文字

を入力列に書き戻す。

33

 33

が偽を返し ,入力列の書戻し位置が使用可能で,

33

   SVL

が真の場合,

V

L

に代入する。その後,

を返す。

33

 33

が偽を返し ,入力列の書戻し位置が使用可能で,

#

 0

33

が非ゼロの場合,

!VV 

に代入する。その後,

を返す。

33

 33

が真を返し,入力列の書戻し位置が使用可能な場合,

V

L

に代入する。その後,

33

を返す。

返却値  

失敗の有無を表すため,

33 

を返す。

参考

上に示した方法のうち,複数の方法が実行可能な場合,どの方法が選ばれるかは,規定しない。

!

,

&&

効果  

次に示す

種類の方法のいずれかによって,可能ならば ,文字

を出力列に追加する。

33

 33

が偽を返し ,出力列の書出し 位置が使用可能か,下に示す方

法によってこの関数が書出し位置を使用可能にできる場合,

を呼び出す。その後,成功を示す

ために

を返す。

33

 33

が真を返す場合,追加すべき文字は存在しない。成功を示す

ために

33 

以外の値を返す。

参考

この関数は,その呼出しの結果として,書出し位置の数を幾つ変更してもよい。

返却値  

失敗を表すため,

33 

を返す。

参考

この関数は,

#

 0

33 

[%

.

である場合に限り,書出し位置を使用可能にする。書出し

位置を使用可能にするため,この関数は,現在の配列オブジェクトに書出し位置を( 少なくとも)一つ加

えた要素数を保持するに十分な配列オブジェクトを再割付けする。配列オブジェクトが存在しない場合,

この条件を満たす配列オブジェクトを新たに割り付ける。

#

 0

33 

[%

.

の場合,この関数

は,読込み終端ポインタ

を,新しい書出し位置の一つ先に進める( 書出し終端ポインタ

も一つ進められる。)

4

(

&&4

(

&&

,

&&

H

&&

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

#

効果  

可能ならば ,制御される列のストリーム位置を,

*

に示す規則に従って変更する。

*

の位置決め

条件

結果

0

33 

[%

.

入力列の位置

0

33 

[%

.

出力列の位置

0

33

1

33  

%%

入力列 及び 出力列の位置

33

1

33  

であって,

33

又は

33

に等しい場合

上記以外の場合

位置決め操作は,失敗する

位置を変更される列の次位置ポインタ(

又は

)が空ポインタの場合,位置決め操作は,失敗する。

そうでない場合,

*

に従って

*

を決定する。

*

*

の値

条件

*

の値

%%

33

%%

33

次位置ポインタと開始ポインタの差(

1

%%

33

終端ポインタと開始ポインタの差(

)

1

*

#

又は

)

1

*

#

の場合,位置決め動作は,失敗する。そうでない場合,

この関数は,

1

#

*

#

を次位置ポインタ

((

に代入する。

返却値  

位置決め操作に成功した場合,上の

*

( 型

)から構築される新しいストリーム位置

を返す。位置決め操作が失敗した場合,又は 構築されたオブジェクトがストリーム位置を表さな

い場合,

VL  

を返す。

4

(

&&

,

&&

H

&&

効果  

可能ならば ,制御された列内のストリーム位置を,

に格納された位置に変更する。

0

33 

[%

.

: 入力列の位置を変更する。

0

33 

[%

.

: 出力列の位置を変更する。

が無効なストリーム位置であった場合,又は この関数がいずれの列に対しても位置決めできなかった

場合,位置変更操作は,失敗する。

が,以前の成功した位置変更関数(

)の呼出しによって得られたものでない場合,その効果は,未定義とする。

返却値  

成功した場合には

。失敗した場合には

VL  

/( 0 $

 $

(

'

効果  

が効果なしであることを除いて,処理系定義とする。

返却値  

))

クラステンプレート

%

P

6

%

P

3

P

3

P&

33P

P&

33P

P&

33P

P&

P&

''

+,(,(+(L

コンストラクタ

P

P

33

%

P33 &

P

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

P

6

0

P33

%

P33 &

''

+,(,(+(+

メンバ

P

6

!

&

P

 6

&

P

6

0

 &

3

''

P

6

%&

説明のためだけ

&

クラス

6

は,クラス

6

からの読込みを提供する。このクラスは,

 6

オブジェクトを用いて関

連する記憶領域を制御する。説明のため,このクラスが保持するデータを次に示す。

%

クラス

のオブジェクト。

))

のコンスト ラクタ

   &&  

,

&&

効果  

クラス

のオブジェクトを構築する。

0% 

を用いて基

底クラスを初期化し,

 6

1

33  

))

)を用いて

&

を初期化する。

/((   0)

(

&&

,

&&

効果  

クラス

のオブジェクトを構築する。

0% 

を用いて基

底クラスを初期化し ,

6

1

33  

を用いて

&

を初期化する。

))

メンバ関数

/( ( :  0$

返却値  

 6

!

 0

%

/( (:  0

返却値  

 V 

!

/( (:  0 )

効果  

 V 

を呼び出す。

))

クラス

%

P

6

%

P

3

P

3

''

P&

33P

P&

33P

P&

33P

P&

P&

''

+,(,(*(L

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

P

P

33

%

P33 &

&.$%

は,常に非公開オブジェクトを返すので,決して

I>>

にならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

P

P

6

0

P33

%

P33 &

''

+,(,(*(+

メンバ

P

6

!

&

P

 6

&

P

6

0

 &

3

''

P

6

%&

説明のためだけ

&

クラス

6

は,クラス

6

への書出しを提供する。このクラスは,

6

オブジェクトを用いて関連

する記憶領域を制御する。説明のため,このクラスが保持するデータを次に示す。

%

クラス

のオブジェクト。

))

のコンスト ラクタ

   &&  

,

&&

効果  

クラスのオブジェクトを構築する。

0% 

を用いて基

底クラスを初期化し,

 6

1

33  

))

)を用い

&

を初期化する。

/((   0)

(

&&

,

&&

効果  

クラス

のオブジェクトを構築する。

0% 

を用いて

基底クラスを初期化し,

 6

1

33  

))

を用いて

&

を初期化する。

))

メンバ関数

/( ( :  0$

返却値  

 6

!

 0

%

/( (:  0

返却値  

 V 

!

/( (:  0 )

効果  

 V 

を呼び出す。

))

クラステンプレート

%

P

6

%

P

3

P

3

''

P&

33P

P&

33P

P&

33P

P&

P&

&.$%

は,常に非公開オブジェクトを返すので,決して

I>>

にならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

''

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

P

P33

%

P331

P

3

3

 &

P

P

 6

0

P33

%

P331

P

3

3

 &

''

メンバ

3

P

6

!

&

P

 6

&

P

6

0

 &

3

''

P

%&

説明のためだけ

&

クラステンプレート

は,クラス

6

に対する読込み 及び 書出しを提供する。このクラスは,

6

オブジェク

トを用いて関連する記憶領域を制御する。説明のため,このクラスが保持するデータを次に示す。

%

クラス

のオブジェクト。

))#

のコンスト ラクタ

&&

,

&&H&& 

効果  

クラス

のオブジェクトを構築する。

0% 

を用いて基

底クラスを初期化し ,

 6

を用いて

&

を初期化する。

/( (   0)

(

&&

,

&&H&& 

効果  

クラス

のオブジェクトを構築する。

0% 

を用いて基

底クラスを初期化し ,

 6

を用いて

&

を初期化する。

))(

メンバ関数

/( ( :  0$

返却値  

0%

/( (:  0

返却値  

 V 

!

/( (:  0 )

効果  

 V 

を呼び出す。

)

ファイルに基づくスト リーム

)

ファイルスト リーム

ヘッダ

は,ストリームバッファをファイルに関連づけるとともにファイル

に対する読み書きを補助する

個のクラステンプレート 及び

個の型を定義している。

ヘッダ

の一覧

Q

%

P

P&

P

&

P

P

&

%

P

&.$%

は,常に非公開オブジェクトを返すので,決して

I>>

にならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

P&

P

&

P

P

&

%

P

P&

P

&

P

P

&

%

P

P&

P

&

P

P

&

R

)

では,型名

+,

は,

)

)で定義された型

9<?8

を意味する。

ファイル

ファイルは,基礎となる文字型が

(バイト )であるような外部ストリーム(ソース 又は

シンク)を提供する。

多バイト 文字 及び ファイル

ファイルは,バイト列を提供する。したがって,

( 及び それか

ら派生したクラス)は,ファイルをバイト列のソース 又は シンクとして扱う。大きな文字集合の環境で

は,多バイト文字の列がファイルに保持される。ファイルの内容をワイド 文字列として扱うためには,ワ

イド 文字単位の

,すなわち

は,ワイド 文字列への変換を行わなければならない。

)

クラステンプレート

Q

%

P

P

3

P

Q

3

P&

33P

P&

33P

P&

33P

P&

P&

''

+,(N(L(+

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

P &

XP 

&

''

+,(N(L(*

メンバ

&

P

!

!

P33

 &

P

!

 &

3

''

+,(N(L(M

多重定義された仮想関数

$

 &

P

 &

P

 &

P

P

%

33  &

P

P

%

33  &

P

!

P!

$

 &

P

P

P33

P33

%

P33

1

P33 &

P

P

P33

%

P33

1

P33 &

 &

0

 &

言語の場合,

5>*

は,

&%

でなければならない。

では,

&%

又は 他の型であっても構わない。

ファイルは,多バイト文字の列とする。その内容を多バイト文字の列として提供するために,

%.$%

は,ワイド 文字の列と多バイト

文字の列との間で変換を行わなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

##

R&

R

クラス

は,入力列 及び 出力列をファイルに関連付ける。

のオブジェクトによって制御される列に対する読込み時 及び 書出し時の制限は,

標準

"

ライブラリの

9<?8

に対するものと同じとする。

特に,次に示す性質をもつ。

ファイルが読込み用にオープンされていないと,入力列から読み込めない。

ファイルが書出し用にオープンされていないと,出力列に書き出せない。

入力列 及び 出力列が共用する

個のファイル位置が保持される。

のインスタンスは,

33

33

であれば ,

)

に規

定されたとおり動作する。そうでない場合の動作は,未定義とする。

ファイル入出力 及び 多バイト文字・ワイド 文字間の変換を提供するため,

と呼ばれる特性項目のメン

バを用いる。これは,次のようにして取得される。

33P

%

P

33P

  &

)

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

効果  

のオブジェクトを構築する。

)#

を用いて基底クラスを初期化する。

事後条件  

%%

!

.

効果  

クラス

のオブジェクトを解体する。

を呼び出す。

)

メンバ関数

返却値  

以前の

の呼出しが成功( 非ナル値を返却)していて,その後に

が呼ばれていない場合,

返す。

/( 0$

$

(

&&

効果  

[%

の場合,空ポインタを返す。そうでない場合,必要ならば

を初期化する。その

後,可能ならば,ファイル名が

A"F

であるファイルをオープンする(

33 

を呼ぶのと同等

とする。)

A"F

は,

)0

33

の値から,

*

のように決定される。

*

ファイルのオープンモード

フラグの組合せ

等価な

%

11

#

;;

#

#

;;

#

#

;;

#

;;

#

#

;);

#

#

#

;);

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

#(

*

ファイルのオープンモード( 続き)

フラグの組合せ

等価な

%

11

#

#

;;

#

#

#

;;

#

#

#

;;

#

#

;;

#

#

#

;);

#

#

#

#

;);

#

*

に挙げられている組合せ以外の場合,オープンは失敗する。

オープンが成功し ,かつ

#

 0

33 

[%

.

の場合,ファイル位置を末尾に移す(

33

. F88>

8A# 

を呼ぶのと同等とする。)

ファイル位置変更操作が失敗した場合,

を呼び出した後,失敗を示すため,空ポインタを返す。

返却値  

成功した場合,

。それ以外の場合,空ポインタ。

/( 0$

効果  

%%

の場合,空ポインタを返す。書出し領域が存在するとき,文字をフラッシュするために

8B9 

を呼び出す。

!

に対する(

及び

との間に行われる)

最後の仮想関数の呼出しが

だった場合,終端列を決定するために

(

を( 場合によっては

複数回)呼び出した後,それらの文字を挿入し ,再度

8B9 

を呼び出す。最後にファイルをクローズする

33

を呼ぶのと同等とする。)

又は

33

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

も失敗する。

返却値  

成功した場合,

。それ以外の場合,空ポインタ。

事後条件  

%%

)

多重定義された仮想関数

'

効果  

33

)#

)として動作する。

参考

入力列からより多くの文字を読み込むことができると判断可能な場合,処理系は,この関数呼出し情報

に対して多重定義となる定義を提供してもよい。

効果  

33

の規定に従って動作する。ただし,次に示す特殊化が行わ

れる。文字の列は,関連付けられたファイルから読み込まれて内部バッファ(

)に格納された後,次に示

すプログラムコード と同じ効果をもつ処理が行われる。

PS5F<K8

T&

!

P&

PS<F<K8T

&

!

P&

P33

%

P)5F<K8 

P)<F<K8

P &

この処理は,そのクラスが

の間の各文字に対応するファイル位置(

)を回復で

きるように,実行しなければならない。

を使い尽くしたことが

の値によって示され

た場合,より大きい

を用いて再実行される。

マクロ

2**M

*F

は,

&

)で定義されている。関数呼出し情報

%

?

/

?

%C5>*/

4/

は,

&

)で宣言されている。

関数呼出し情報

%5>*

は,

&

)で宣言されている。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#)

効果  

33

の規定に従って動作する。ただし,文字列は,

と同

じ方法で読み込まれる。

4

,

&&

効果  

可能ならば ,

によって示される文字を,次に示す

種類の方法のいずれかを用いて,入力列に書き戻す。

33

 33

が偽を返し ,

が書戻し位置を使用可能にし ,更に

33

   SVL

が真を返す場合,入力列の次位置ポインタ

らす。返却値:

33

 33

が偽を返し ,

が書戻し位置を使用可能にし ,更に

書戻し位置に代入が許されている場合,入力列の次位置ポインタ

減らし ,そこに

を格納す

る。返却値:

33

 33

が真を返し ,入力ストリームの書戻し 位置が使用可能である

が書戻し位置を使用可能にするかする場合,入力列の次位置ポインタ

減らす。

返却値:

33

返却値  

失敗を表すために

33 

を返す。

参考

%%

の場合,この関数は,必ず失敗する。この関数は,入力列に対して直接文字を返

すわけではない。上に示した複数の方法が実行可能な場合,どの方法が用いられるかは,規定しない。ど

のような場合でも,この関数が呼ばれた結果として,複数の書戻し位置を変更することができる。

!

,

&&

効果  

33

に対する規定に従って動作する。ただし ,

:

文字を消費す

;

の部分では,最初に次の処理が行われる。

!

%

 &

!

%

 &

!

&

S5F<K8T&

!

P&

P33

%

Q4Q4PRR

(

)5F<K8 

P &

更に,次に示す処理が行われる。

%%

33

の場合,失敗する。

%%

33

の場合,

から

まで(

は,含まない。)の文字を出力する。

%%

33

の場合,

から

までの文字を出力した後,

から

までの

文字を使って処理を繰り返す。出力が失敗したとき,この関数も失敗する( 繰返しは,行わない。)

その他の場合,

から

までの文字を出力する。出力に失敗したとき,この関数も失敗する。

この時点で

[%

かつ

%%

(しかし ,十分な大きさではない。)の場合,

"F<K8

を増やし ,最初か

ら繰り返す。

返却値  

成功した場合,

33

を返し,失敗した場合,

33 

を返す。

%%

の場合,この関数は常に失敗する。

$

 $

(

'

効果  

ストリームに対して何らかの入出力が行われる前に

が呼ばれた場合,ストリームは,バッファ

リングされなくなる。そうでない場合の動作は,処理系定義とする。

:

バッファリングされない

;

とは,

及び

が常にナルを返し ,ファイルに対する出力は,速やかに書き出さなければならないことを意味する。

4

(

&&4

(

&&

,

&&

H

&&

効果  

ここでは,

 "

と表す。

%%

又は

[%

.

00

 "

%

.

の場

合,位置決め動作は,失敗する。それ以外の場合,

[%

33

又は

[%

.

で,最後に行われた操作

が出力の場合,出力列を更新し,必要ならばシフト復帰列を書く。次に新しい位置に向かってシークする。

 "

.

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

#

の場合,

33 

 "

!

"

を呼び出し,そうでない場合,

33 

"

を呼び出す。

参考

:

最後に行われた操作が出力である

;

とは,最後の仮想関数の呼出しが

であったか,書出しバッ

ファが空でないことを意味する。

:

必要ならばシフト復帰列を書く

;

とは,

 "

がゼロより小さい場合,

)5F<K8 

を呼び,その結果として得られるシフト復帰列

を出力することを意味する。この関数は,

型の実引数

"

が,

*

に示す

種類のいずれの値で

あるかを決める。

*

の効果

<

の値

における等価な指定

33

F88>

F8

33

F88>

7GE

33

F88>

8A#

返却値  

可能ならば,変更後のストリーム位置を表す新しく構築された

オブジェクトを返す。位置決め操作

が失敗した場合,又は オブジェクトが変更後のストリーム位置を表現できない場合には,

VL  

を返す。

4

(

&&

,

&&

H

&&

効果  

可能ならば ,

に格納された位置に対応するように,ファイル位置を変更する。

0

33 

[%

.

の場合,ファイル位置を

にし ,入力列を更新する。

0

33 

[%

.

の場合,出力列を更新し,必要ならばシフト復帰列を書き,ファイル位

置を

にする。

が無効なストリーム位置である場合,又は この関数がいずれの列の位置変更も行わない場合,位置変更操作は

失敗する。

が,同一のファイルに対する位置変更関数(

又は

)の成功した結果として返された

ものでなかった場合の効果は,未定義とする。

返却値  

成功した場合,

を返す。そうでない場合,

VL  

を返す。

効果  

書出し領域が存在する場合,ファイルに文字を書き出すために

33

を呼び出す。読込み領域

が存在する場合の効果は,処理系定義とする。

!

)

事後条件  

ファイル位置が先頭でなく,

で決まる現在の現地特性のエンコーディングが状態依

存の場合(

#

参照),その特性項目は,

の対応する特性項目と同じでなければならない。

効果  

この関数の呼出し後,入出力される文字は,新たな

の呼出しが行われるまで,

に従って変換される。

参考

これは,それ以前に変換された文字の再変換を必要とするかもしれない。更に,このことは,ファイル

の元の内容を再構成することを処理系に要求するかもしれない。

)#

クラステンプレート

%

P

P

3

P

3

P&

33P

P&

33P

P&

33P

P&

P&

''

+,(N(L(-

コンストラクタ

P &

P

!

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#*

P33

#

%

P33 &

''

+,(N(L(,

メンバ

P

!

&

P &

!

P33

#

%

P33 &

 &

3

''

P

%&

説明のためだけ

&

クラス

は,ファイルからの読込みを提供する。このクラスは,

のオブジェクトを用いて関連付けられた列を制御する。説明のため,このクラスが

保持するデータを次に示す。

%

クラス

のオブジェクト。

)(

のコンスト ラクタ

効果  

クラス

のオブジェクトを構築する。

0% 

を用いて基底クラ

スを初期化し ,

を用いて

%

を初期化する(

)(

及び

)

参照)

$

(

&&

,

&&

効果  

クラス

のオブジェクトを構築する。

0% 

を用いて基底クラ

スを初期化し,

を用いて

%

を初期化する(

)(

及び

)

参照)

。そ

の後,

 V

#

 1 

を呼び出す。

この関数が空ポインタを返した場合,

を呼ぶ(それが

33

を送出するかもし

れない。)

))

メンバ関数

/( 0$

返却値  

!

 0

%

返却値  

 V

!

$

(

&&

,

&&

効果  

 V 

#

 1 

を呼び出す。この関数が空ポインタを返した場合,

を呼

ぶ(それが

33

)

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

!

効果  

 V

を呼び出す。この関数が

を返した場合,

を呼ぶ(それが

33

)

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

)

クラステンプレート

%

P

P

3

P

3

P&

33P

P&

33P

P&

&.$%

は,常に非公開オブジェクトを返すので,決して

I>>

にならない。

&.$%

は,常に非公開オブジェクトを返すので,決して

I>>

にならない。

オープンが成功した場合,エラー状態を変更しない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

33P

P&

P&

''

+,(N(L(O

コンストラクタ

P &

P

!

P33

#

%

P33 &

''

+N(N(L(L.

メンバ

P

!

&

P &

!

P33

#

%

P33 &

 &

3

''

P

%&

説明のためだけ

&

クラス

は,ファイルへの書出しを提供する。このクラスは,

オブジェクトを用いて関連付けられた列を制御する。説明のため,このクラスが保

持するデータを次に示す。

%

クラス

のオブジェクト。

)*

のコンスト ラクタ

効果  

クラス

のオブジェクトを構築する。

0% 

を用いて基底クラ

スを初期化し ,

を用いて

%

を初期化する(

)(

及び

)

参照)

$

(

&&

,

&&

効果  

クラス

のオブジェクトを構築する。

0% 

を用いて基底クラ

スを初期化し,

を用いて

%

を初期化する(

)(

及び

)

参照)

。その

後,

 V 

#

 1 

を呼び出す。

この関数が空ポインタを返した場合,

を呼ぶ(それが

33

を送出するかもし

れない。)

)

メンバ関数

/( 0$

返却値  

!

 0

%

返却値  

 V

!

$

(

&&

,

&&

効果  

 V

#

 1 

を呼び出す。この関数が空ポインタを返した場合,

を呼

び出す(それが

33

)

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

!

効果  

 V 

を呼び出す。この関数が空ポインタを返した場合,

を呼び出す(そ

れが

33

)

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

&.$%

は,決して

I>>

にならない。なぜなら,これは,常に非公開のオブジェクト

%.$%

を返すからである。

オープンが成功した場合,エラー状態を変更しない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

)

クラステンプレート

%P

P

3

P

3

P&

33P

P&

33P

P&

33P

P&

P&

''

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

P &

P

!

P33

#

%

P331P

3

3

 &

''

メンバ

3

P

!

&

P &

!

P33

#

%

P331P

3

3

 &

 &

3

''

P

%&

説明のためだけ

&

クラステンプレート

は,ファイルへの入出力を提供する。これは, オブジェク

を用いて,関連付けられた列を制御する。説明のため,このクラステンプレート

が保持するデータを次に示す。

%

クラス

のオブジェクト。

)

のコンスト ラクタ

効果  

クラスのオブジェクトを構築する。

0%

を用いて基底ク

ラスを初期化し ,

を用いて

%

を初期化する。

$

(

&&

効果  

クラス

のオブジェクトを構築する。

0% 

を用いて基底クラ

スを初期化し ,

を用いて

%

を初期化する。その後,

 V 

#

  

を呼び出す。この関数が空ポインタを返した場合,

を呼ぶ(それが

33

を送出

するかもしれない。)

)

メンバ関数

/( 0$

返却値  

0%

返却値  

 V

 E

!

$

(

&&

効果  

 V

#

  

を呼び出す。この関数が空ポインタを返した場合,

を呼ぶ

(それが

33

)

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

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

#

!

効果  

 V

を呼び出す。この関数が偽を返した場合,

)

)を呼ぶ(それ

33

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

)

ライブラリファイル

*

は,ヘッダ

を規定する。

*

ヘッダ

の一覧

マクロ

"G9F<K

9BC8A

@65

F88>

7GE

@C

@65

<BA"9

8B9

?

F88>

8A#

<B9"9

9<?8A6@8

@65

AG??

F88>

F8

<B?"9

9<?8

$

関数

参照  

6

)*

6

追補

(

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

附属書

&

附属書

( 参考) 文法の要約

ここに示す

"##

構文規則の要約は,理解を助けることを意図しており,言語仕様を正確に述べたものではない。

特に,ここで述べる文法は,正当な

"##

の構文単位を超えるものを許容している。式と宣言とを判別するには,あ

いまい性解決規則(

(

)

及び

参照)を適用する必要がある。さらに,アクセス制御規則,あいまい性解決

規則 及び 型の規則を用いて,構文規則上は正当であっても意味のない構文単位を排除しなければならない。

3

キーワード

型定義(

)

),名前空間(

)

),クラス(

*

),列挙体(

)

) 及び テンプレート(

)の

宣言によって,文脈依存の新しいキーワードがプログラムに導入される。

型定義名

3

識別子

名前空間名

3

原名前空間名

名前空間別名

原名前空間名

3

識別子

名前空間別名

3

識別子

クラス名

3

識別子

テンプレート識別子

列挙体名

3

識別子

テンプレート名

3

識別子

参考

クラスを名付ける《型定義名》は,

《クラス名》ともなる(

*

参照)

3

字句要素

進四つ組

3

進数字

進数字

進数字

進数字

国際文字名

3

4

進四つ組

4G

進四つ組

進四つ組

前処理字句

3

ヘッダ名

識別子

前処理数

文字リテラル

文字列リテラル

前処理記号

これらのいずれにも当てはまらない単独の非空白類文字

字句

3

識別子

キーワード

リテラル

演算子

区切り子

ヘッダ名

3

文字列

Y

A

文字列

Y

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

附属書

&

文字列

3

文字

文字列

文字

文字

3

改行文字 及び

を除くソース文字集合の文字

A

文字列

3

A

文字

A

文字列

A

文字

A

文字

3

改行文字 及び

Y

を除くソース文字集合の文字

前処理数

3

数字

(

数字

前処理数

数字

前処理数

非数字

前処理数

符号

前処理数

8

符号

前処理数

(

識別子

3

非数字

識別子

非数字

識別子

数字

非数字

3

次のいずれか

国際文字名

P

$

6

"

7

#

8

9

:

;

<

=

>

?

@

A

B

C

D

E

F

G

H

I

5

J

K

数字

3

次のいずれか

B

L

+

*

M

/

-

,

N

O

前処理記号

3

次のいずれか

S

T

3

3

U

U

U3

U3U3

&

3

(((

2

33

(

(!

)

V

!

'

U

W

0

1

X

[

%

)%

V%

!%

'%

U%

W%

0%

1%

%

%

%%

[%

%

%

00

11

))

VV

V!

V

P

P

P

P

リテラル

3

整数リテラル

文字リテラル

浮動小数点リテラル

文字列リテラル

真理値リテラル

整数リテラル

3

進リテラル

整数接尾語

進リテラル

整数接尾語

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

##

附属書

&

進リテラル

整数接尾語

進リテラル

3

非零数字

進リテラル

数字

進リテラル

3

.

進リテラル

進数字

進リテラル

3

.

進数字

.5

進数字

進リテラル

進数字

非零数字

3

次のいずれか

L

+

*

M

/

-

,

N

O

進数字

3

次のいずれか

.

L

+

*

M

/

-

,

進数字

3

次のいずれか

.

L

+

*

M

/

-

,

N

O

6

"

7

#

8

9

整数接尾語

3

符号なし接尾語

倍長接尾語

倍長接尾語

符号なし接尾語

符号なし接尾語

3

次のいずれか

G

倍長接尾語

3

次のいずれか

?

文字リテラル

3

Z

文字列

Z

?

Z

文字列

Z

文字列

3

文字

文字列

文字

文字

3

一重引用符

Z

,逆斜線

4

及び 改行文字を除くソース文字集合の文字

逆斜線表記

国際文字名

逆斜線表記

3

単純逆斜線表記

進逆斜線表記

進逆斜線表記

単純逆斜線表記

3

次のいずれか

4Z

4Y

42

44

4

4

4

4

4

4

4

進逆斜線表記

3

4

進数字

4

進数字

進数字

4

進数字

進数字

進数字

進逆斜線表記

3

4

進数字

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#(

附属書

&

進逆斜線表記

進数字

浮動小数点リテラル

3

小数点定数

指数部

浮動小数点接尾語

数字列

指数部

浮動小数点接尾語

小数点定数

3

数字列

(

数字列

数字列

(

指数部

3

符号

数字列

8

符号

数字列

符号

3

次のいずれか

)

V

数字列

3

数字

数字列

数字

浮動小数点接尾語

3

次のいずれか

9

?

文字列リテラル

3

Y

!

文字列

Y

?

Y

!

文字列

Y

!

文字列

3

!

文字

!

文字列

!

文字

!

文字

3

二重引用符

Y

,逆斜線

4

及び 改行文字を除くソース文字集合の文字

逆斜線表記

国際文字名

真理値リテラル

3

3

基本概念

翻訳単位

3

宣言列

3

一次式

3

リテラル

識別子式

識別子式

3

修飾なし識別子

修飾付き識別子

修飾なし識別子

3

識別子

演算子関数識別子

変換関数識別子

X

クラス名

テンプレート識別子

修飾付き識別子

3

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#)

附属書

&

33

入れ子名前指定子

修飾なし識別子

33

識別子

33

演算子関数識別子

33

テンプレート識別子

入れ子名前指定子

3

クラス名・名前空間名

33

入れ子名前指定子

クラス名・名前空間名

33

入れ子名前指定子

クラス名・名前空間名

3

クラス名

名前空間名

後置式

3

一次式

後置式

S

T

後置式

式並び

単純型指定子

式並び

33

入れ子名前指定子

識別子

式並び

33

入れ子名前指定子

テンプレート識別子

式並び

後置式

(

識別子式

後置式

V

識別子式

後置式

(

擬似デストラクタ名

後置式

V

擬似デストラクタ名

後置式

))

後置式

VV

P

型識別子

P

型識別子

P

型識別子

P

型識別子

型識別子

式並び

3

代入式

式並び

代入式

擬似デストラクタ名

3

33

入れ子名前指定子

型名

33

X

型名

33

入れ子名前指定子

テンプレート識別子

33

X

型名

33

入れ子名前指定子

X

型名

単項式

3

後置式

))

キャスト式

VV

キャスト式

単項演算子

キャスト式

$

単項式

$

型識別子

<

3

単項演算子

3

次のいずれか

!

0

)

V

[

X

<

3

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

附属書

&

33

生成位置指定

生成型識別子

生成初期化子

33

生成位置指定

型識別子

生成初期化子

生成位置指定

3

式並び

生成型識別子

3

型指定子列

<

宣言子

<

宣言子

3

ポインタ演算子

<

宣言子

直接

<

宣言子

直接

<

宣言子

3

S

T

直接

<

宣言子

S

定数式

T

生成初期化子

3

式並び

3

3

33

キャスト式

33

S

T

キャスト式

キャスト式

3

単項式

型識別子

キャスト式

メンバポインタ式

3

キャスト式

メンバポインタ式

(!

キャスト式

メンバポインタ式

V!

キャスト式

乗除式

3

メンバポインタ式

乗除式

!

メンバポインタ式

乗除式

'

メンバポインタ式

乗除式

U

メンバポインタ式

加減式

3

乗除式

加減式

)

乗除式

加減式

V

乗除式

シフト式

3

加減式

シフト式

加減式

シフト式

加減式

関係式

3

シフト式

関係式

シフト式

関係式

シフト式

関係式

%

シフト式

関係式

%

シフト式

等価式

3

関係式

等価式

%%

関係式

等価式

[%

関係式

ビット積式

3

等価式

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#*

附属書

&

ビット積式

0

等価式

ビット差式

3

ビット積式

ビット差式

W

ビット積式

ビット和式

3

ビット差式

ビット和式

1

ビット差式

論理積式

3

ビット和式

論理積式

00

ビット和式

論理和式

3

論理積式

論理和式

11

論理積式

二択条件式

3

論理和式

論理和式

2

3

代入式

代入式

3

二択条件式

論理和式

代入演算子

代入式

送出式

代入演算子

3

次のいずれか

%

!%

'%

U%

)%

V%

%

%

0%

W%

1%

3

代入式

代入式

定数式

3

二択条件式

3#

3

ラベル付き文

式文

複合文

選択文

繰返し文

飛越し文

宣言文

監視ブロック

ラベル付き文

3

識別子

3

定数式

3

3

式文

3

&

複合文

3

文列

文列

3

文列

選択文

3

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

附属書

&

条件

条件

条件

条件

3

型指定子列

宣言子

%

代入式

繰返し文

3

条件

&

初期化文

条件

&

初期化文

3

式文

単純宣言

飛越し文

3

&

&

&

識別子

&

宣言文

3

ブロック宣言

3(

宣言

宣言列

3

宣言

宣言列

宣言

宣言

3

ブロック宣言

関数定義

テンプレート宣言

明示的具現化

明示的特殊化

結合指定

名前空間定義

ブロック宣言

3

単純宣言

!

定義

名前空間別名定義

 !

宣言

 !

指令

単純宣言

3

宣言指定子列

初期化宣言子並び

&

宣言指定子

3

記憶域種別指定子

型指定子

関数指定子

宣言指定子列

3

宣言指定子列

宣言指定子

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

附属書

&

記憶域種別指定子

3

関数指定子

3

型定義名

3

識別子

型指定子

3

単純型指定子

クラス指定子

列挙体指定子

詳述型指定子

0

修飾子

単純型指定子

3

33

入れ子名前指定子

型名

33

入れ子名前指定子

テンプレート識別子

P

型名

3

クラス名

列挙体名

型定義名

詳述型指定子

3

クラスキー

33

入れ子名前指定子

識別子

クラスキー

33

入れ子名前指定子

テンプレート識別子

33

入れ子名前指定子

識別子

33

入れ子名前指定子

識別子

33

入れ子名前指定子

テンプレート識別子

列挙体名

3

識別子

列挙体指定子

3

識別子

列挙子並び

列挙子並び

3

列挙子定義

列挙子並び

列挙子定義

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

附属書

&

列挙子定義

3

列挙子

列挙子

%

定数式

列挙子

3

識別子

名前空間名

3

原名前空間名

名前空間別名

原名前空間名

3

識別子

名前空間定義

3

名前付き名前空間定義

名前なし名前空間定義

名前付き名前空間定義

3

原名前空間定義

拡張名前空間定義

原名前空間定義

3

識別子

名前空間本体

拡張名前空間定義

3

原名前空間名

名前空間本体

名前なし名前空間定義

3

名前空間本体

名前空間本体

3

宣言列

名前空間別名

3

識別子

名前空間別名定義

3

識別子

%

修飾付き名前空間指定子

&

修飾付き名前空間指定子

3

33

入れ子名前指定子

名前空間名

 !

宣言

3

33

入れ子名前指定子

修飾なし識別子

&

33

修飾なし識別子

&

 !

指令

3

33

入れ子名前指定子

名前空間名

&

!

定義

3

文字列リテラル

&

結合指定

3

文字列リテラル

宣言列

文字列リテラル

宣言

3)

宣言子

初期化宣言子並び

3

初期化宣言子

初期化宣言子並び

初期化宣言子

初期化宣言子

3

宣言子

初期化子

宣言子

3

直接宣言子

ポインタ演算子

宣言子

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

附属書

&

直接宣言子

3

宣言子識別子

直接宣言子

仮引数宣言節

0

修飾子列

例外指定

直接宣言子

S

定数式

T

宣言子

ポインタ演算子

3

!

0

修飾子列

0

33

入れ子名前指定子

!

0

修飾子列

0

修飾子列

3

0

修飾子

0

修飾子列

0

修飾子

3

宣言子識別子

3

識別子式

33

入れ子名前指定子

型名

型識別子

3

型指定子列

抽象宣言子

型指定子列

3

型指定子

型指定子列

抽象宣言子

3

ポインタ演算子

抽象宣言子

直接抽象宣言子

直接抽象宣言子

3

直接抽象宣言子

仮引数宣言節

0

修飾子列

例外指定

直接抽象宣言子

S

定数式

T

抽象宣言子

仮引数宣言節

3

仮引数宣言並び

(((

仮引数宣言並び

(((

仮引数宣言並び

3

仮引数宣言

仮引数宣言並び

仮引数宣言

仮引数宣言

3

宣言指定子列

宣言子

宣言指定子列

宣言子

%

代入式

宣言指定子列

抽象宣言子

宣言指定子列

抽象宣言子

%

代入式

関数定義

3

宣言指定子列

宣言子

コンストラクタ初期化子

関数本体

宣言指定子列

宣言子

関数監視ブロック

関数本体

3

複合文

初期化子

3

%

初期化子節

式並び

初期化子節

3

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

附属書

&

代入式

初期化子並び

初期化子並び

3

初期化子節

初期化子並び

初期化子節

3

クラス

クラス名

3

識別子

テンプレート識別子

クラス指定子

3

クラス先頭部

メンバ指定

クラス先頭部

3

クラスキー

識別子

基底節

クラスキー

入れ子名前指定子

識別子

基底節

クラスキー

入れ子名前指定子

テンプレート識別子

基底節

クラスキー

3

メンバ指定

3

メンバ宣言

メンバ指定

アクセス指定子

3

メンバ指定

メンバ宣言

3

宣言指定子列

メンバ宣言子並び

&

関数定義

&

33

入れ子名前指定子

修飾なし識別子

&

 !

宣言

テンプレート宣言

メンバ宣言子並び

3

メンバ宣言子

メンバ宣言子並び

メンバ宣言子

メンバ宣言子

3

宣言子

純粋指定子

宣言子

定数初期化子

識別子

3

定数式

純粋指定子

3

%

.

定数初期化子

3

%

定数式

3*

派生クラス

基底節

3

3

基底指定子並び

基底指定子並び

3

基底指定子

基底指定子並び

基底指定子

基底指定子

3

33

入れ子名前指定子

クラス名

アクセス指定子

33

入れ子名前指定子

クラス名

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

##

附属書

&

アクセス指定子

33

入れ子名前指定子

クラス名

アクセス指定子

3

3

特殊メンバ関数

変換関数識別子

3

変換型識別子

変換型識別子

3

型指定子列

変換宣言子

変換宣言子

3

ポインタ演算子

変換宣言子

コンストラクタ初期化子

3

3

メンバ初期化子並び

メンバ初期化子並び

3

メンバ初期化子

メンバ初期化子

メンバ初期化子並び

メンバ初期化子

3

メンバ初期化子識別子

式並び

メンバ初期化子識別子

3

33

入れ子名前指定子

クラス名

識別子

3

多重定義

演算子関数識別子

3

演算子

演算子

テンプレート実引数並び

演算子

3

次のいずれか

ST

ST

)

V

!

'

U

W

0

1

X

[

%

)%

V%

!%

'%

U%

W%

0%

1%

%

%

%%

[%

%

%

00

11

))

VV

V!

V

ST

3

テンプレート

テンプレート宣言

3

テンプレート仮引数並び

宣言

テンプレート仮引数並び

3

テンプレート仮引数

テンプレート仮引数並び

テンプレート仮引数

テンプレート仮引数

3

型仮引数

仮引数宣言

型仮引数

3

識別子

識別子

%

型識別子

識別子

識別子

%

型識別子

テンプレート仮引数並び

識別子

テンプレート仮引数並び

識別子

%

識別子式

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#(

附属書

&

テンプレート識別子

3

テンプレート名

テンプレート実引数並び

テンプレート名

3

識別子

テンプレート実引数並び

3

テンプレート実引数

テンプレート実引数並び

テンプレート実引数

テンプレート実引数

3

代入式

型識別子

識別子式

明示的具現化

3

宣言

明示的特殊化

3

宣言

3

例外処理

監視ブロック

3

複合文

ハンド ラ列

関数監視ブロック

3

コンストラクタ初期化子

関数本体

ハンド ラ列

ハンド ラ列

3

ハンド ラ

ハンド ラ列

ハンド ラ

3

例外宣言

複合文

例外宣言

3

型指定子列

宣言子

型指定子列

抽象宣言子

型指定子列

(((

送出式

3

代入式

例外指定

3

型識別子並び

型識別子並び

3

型識別子

型識別子並び

型識別子

3

前処理指令

前処理ファイル

3

グループ

グループ

3

グループ 構成要素

グループ

グループ構成要素

グループ 構成要素

3

前処理字句列

改行

制御行

3

グループ

グループ 列

!

グループ

3

グループ

3

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#)

附属書

&

定数式

改行

グループ

識別子

改行

グループ

識別子

改行

グループ

グループ列

3

グループ

グループ 列

グループ

グループ

3

定数式

改行

グループ

!

グループ

3

改行

グループ

3

3

改行

制御行

3

前処理字句列

改行

識別子

置換内容列

改行

識別子

左括弧

識別子並び

置換内容列

改行

識別子

改行

前処理字句列

改行

前処理字句列

改行

前処理字句列

改行

改行

左括弧

3

直前に空白類のない左括弧文字

置換内容列

3

前処理字句列

前処理字句列

3

前処理字句

前処理字句列

前処理字句

改行

3

改行文字

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#

附属書

4

附属書

( 参考) 処理系限界

コンピュータ資源は有限なので,

"##

の処理系が,プログラムを成功裏に処理できる大きさに制限があるのはや

むを得ない。どの処理系も,処理できる限界を明記しなければならない。文書で処理系の限界値を示す際に,利用可

能な資源の関数として制限値を計算する方法を示したり,あらかじめ決められた制限はないとしても不明であると表

示したりしてもよい。

処理系は,次に示す項目に関する量などを制限してもよい。それぞれの項目に続けて括弧で囲って示す数字は,最

小の大きさの推奨値とする。それらは,単なるガ イド ラインであって規格合致要件ではない。

複合文,繰り返し制御構造 及び 選択制御構造の入れ子の段数(

条件付き取込みの入れ子の段数(

一つの宣言の中で,算術型,構造体型,共有体型 又は 不完全型を変更する,ポインタ宣言子,配列宣言

子 及び 関数宣言子を組み合わせた合計の個数(

一つの完全式の中で,括弧付きの式の入れ子の段数(

一つの内部識別子 又は マクロ名の文字数(

一つの外部識別子の文字数(

一つの翻訳単位内の外部識別子の個数(

一つのブロック内で,そのブロック有効範囲をもつ識別子の個数(

一つの翻訳単位内で同時に定義されるマクロ識別子の個数(

一つの関数定義内の仮引数の個数(

一つの関数呼出しでの実引数の個数(

一つのマクロ定義内の仮引数の個数(

一つのマクロ呼出しでの実引数の個数(

一つの論理ソース行内の文字数(

文字列リテラル 又は ワイド 文字列リテラルの連結後の文字数(

一つのオブジェクトの大きさ(

ファイルに対する入れ子の段数(

一つの

!<

文に対する

!

ラベルの個数(

一つのメンバ,構造体 又は 共用体内のデータメンバの個数(

一つの列挙体内の列挙体定数の個数(

一つの《構造体宣言並び》におけるクラス定義,構造体定義 又は 共用体定義の入れ子の段数

によって登録する関数の個数(

直接基底クラスと間接基底クラスとを合計した個数(

一つのクラスに対する直接基底クラスの個数(

一つのクラス内で宣言されるメンバの個数(

アクセス可能か否かにかかわらず,一つのクラスの中の最終上書き仮想関数の個数(

一つのクラスの直接 及び 間接の仮想基底の数(

一つのクラス内の静的メンバの個数(

一つのクラス内の随伴関数の個数(

一つのクラス内のアクセス制御宣言の個数(

一つのコンストラクタ定義内のメンバ初期化子の個数(

一つの識別子の有効範囲修飾の個数(

外部結合指定の入れ子の段数(

一つのテンプレート宣言内のテンプレート実引数の個数(

テンプレート具現化を再帰的に入れ子にできる段数

一つの監視ブロックのハンド ラの個数(

一つの関数宣言に対する割込み送出指定の個数(

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#*

附属書

"

附属書

( 参考)  

プログラム言語

との互換性

ここでは,

6

及び

6

追補

で規定されている仕様との互換性について記載する。

,,

及び

では,この規格の箇条番号ごとに,

"##

言語と

"

言語との仕様の差異を列挙する。

字句要素

改変内容  

"##

言語流儀のコメント

''

を追加する。対になった斜線の後に,

行のコメントを書くことができる。

改変理由  

この流儀のコメントは,

"##

言語に有用である。

元の規定への影響  

確定している機能に対する意味の変更となる。除算演算子の直後に

"

言語流儀のコメントが続

く正当な

"

言語での式は,

"##

言語流儀では,コメントと扱われる。

Q

%

M&

%

N

''!

!'

&

)&

R

移行の難易性  

構文上の変形によって移行できる。除算演算子の直後に空白類を付加する。

利用頻度  

''!

という字句並びは,極めて稀である。

改変内容  

新しいキーワード を追加する。複数の新しいキーワードが

"##

言語に追加された(

参照)

改変理由  

"##

言語の新しい意味規則を実装するために,新しいキーワードが追加された。

元の規定への影響  

確定している機能に対する意味の変更となる。新しいキーワード を識別子として使っている

"

プログラムは,正当な

"##

プログラムではなくなる。

移行の難易性  

構文上の変形によって移行できる。一つのプログラムの移行ならば容易であるが,関連する多数のプ

ログラムを移行するには,多くの作業を要する。

利用頻度  

頻繁にある。

改変内容  

文字リテラルの型を

から

に変更する。

改変理由  

多重定義関数の実引数の型合致処理を改善するために必要となった。

 &

 &

ZZ

 &

この関数呼出しは,一つ目の関数ではなく,二つ目の関数と合致させるのが望ましい。

元の規定への影響  

確定している機能に対する意味の変更となる。

$

ZZ

 %%$

という式に依

存する

"

のプログラムは,

"##

プログラムとしては同じ動作をしない。

移行の難易性  

単純である。

利用頻度  

$

ZZ

の値に依存するプログラムは,稀であろう。

改変内容  

文字列リテラルは,定値とする。文字列リテラルの型は,

:

の配列

;

から

:

の配列

;

に変

更する。ワイド 文字列リテラルの型は,

:

の配列

;

から

:

の配列

;

に変更する。

改変理由  

これによって,実引数の値を変更できることを期待する多重定義関数を不適当に呼び出してしまうことを

防止する。

元の規定への影響  

確定している機能に対する意味の変更となる。

移行の難易性  

文字列リテラルは,

!

に変換できる(

参照)ので,簡単な構文の変形によって移行できる。

多くの場合は,推奨されてはいないが新しく導入された変換で対処することができる。

!

%

YY&

''

7

言語では正当,

7))

言語では推奨しない。

!

%

2

YY

3

YY&

''

7

言語では正当,

7))

言語では正当でない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

##

附属書

"

利用頻度  

文字列リテラルを変更可能な変数へのポインタとして使うことに合理的理由をもつプログラムは,稀であ

ろう。

基本概念 及び

標準変換

改変内容  

"##

言語には,

"

言語の仮定義

0

3>

がない。

"

言語のファイル有効範囲において,次の例は,

"

言語では正当であるが,

"##

言語では不当となる。

&

&

これによって,初期化子が

"

言語の構文形式に限られている場合,ファイル局所な静的オブジェクトを相

互参照して定義することができなくなる。

5

Q

&

5

!&

R&

5

&

5

%

Q

0

R&

5

%

Q

0

R&

改変理由  

これによって,組込みの型と利用者定義の型とで異なる初期化の規則を設けなくともよいことになる。

元の規定への影響  

確定している機能の削除となる。

移行の難易性  

意味的な変形による。

"##

言語では,ファイル局所の静的オブジェクトを相互参照する場合,一方

のオブジェクトは,関数呼出しを行って初期化しなければならない。

利用頻度  

稀である。

改変内容  

構造体は,

"

言語とは異なり,

"##

言語では有効範囲となる。

改変理由  

クラス有効範囲は,

"##

言語では不可欠なものであり,構造体はクラスの一つである。

元の規定への影響  

確定している機能に対する意味の変更となる。

移行の難易性  

意味的な変形による。

利用頻度  

"

プログラムで構造体が頻繁に利用されるが,構造体の外側で,構造体名,列挙体名 又は 列挙子名が参

照される場合にだけ注意が必要となる。しかし ,そういう場合は稀であろう。

#

)#

にも関連する。)

改変内容  

ファイル有効範囲の名前が,明示的に

と宣言されていても,明示的に

と宣言されていない

場合,

"##

言語では内部結合をもつが,

"

言語では外部結合としている。

改変理由  

の付いたオブジェクトは,

"##

言語では翻訳時に利用できるので,利用者は,明示的な初期化子

の値をそれぞれの

に対して提供するようになる。この改変によって,利用者は,複数の翻訳単位に取り込まれ

るヘッダファイルの中に,

の付いたオブジェクトを置くことができる。

元の規定への影響  

確定している機能に対する意味の変更となる。

移行の難易性  

意味的な変形による。

利用頻度  

稀である。

(

改変内容  

関数

は,再帰的呼出しができないし ,そのアドレスを得ることはできない。

改変理由  

関数

は,特別な動作を必要とする。

元の規定への影響  

確定している機能の削除となる。

移行の難易性  

自明である。仲介する関数( 例えば ,

  

)を作ればよい。

利用頻度  

稀である。

*

改変内容  

"

言語では,適合する型

1%

1

!

を設けていたが,

"##

言語にはない。例えば ,異なるタグ

名をもつ以外は同等な構造体型ど うしは,

"

言語では

:

適合する

;

が,

"##

言語では明確に異なる型となる。

改変理由  

より厳密な型の検査が

"##

言語の本質である。

元の規定への影響  

確定している機能の削除となる。

移行の難易性  

意味的な変形による。型安全結合

1

!

I

の機構によって,この問題の多く( すべてでは

ない。)を検出できる。型安全結合によって検出されない問題は,この規格の配置適合規則に従って,適当に動作し

続ける。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

##

附属書

"

利用頻度  

頻繁にある。

改変内容  

!

をオブジェクトへのポインタ型に変換するには,キャストが必要になる。

SL.T&

!%&

Q

!%&

R

へのポインタをオブジェクトへのポインタ型に代入する使い方が

"

言語では許されるが,

"##

言語では許さ

れない。

改変理由  

"##

言語では,翻訳時の型安全性を

"

言語よりも強化している。

元の規定への影響  

確定している機能の削除となる。

移行の難易性  

自動的な変更が可能である。違反が

"##

翻訳時に診断される。キャストを追加することによって対

策できる。

!

%

&

利用頻度  

かなり頻繁に使われているが,

へのポインタをオブジェクトへのポインタ型に代入する場合にはキャ

ストを付加するのが,良いプログラム作成法である。

"

言語の処理系の中に,キャストがないと警告を生成するもの

もある。

改変内容  

定値でも揮発でもないオブジェクトへのポインタを除き,

!

に暗黙に変換してはならない。

改変理由  

型安全性を改善する。

元の規定への影響  

確定している機能の削除となる。

移行の難易性  

自動的な変更ができる。定値オブジェクトへのポインタから

!

への暗黙の変換を行う

"

プログ

ラムには,診断メッセージが生成される。修正は,明示的なキャストを付加すればよい。

利用頻度  

稀である。

#

#

改変内容  

関数の暗黙宣言は,許されない。

改変理由  

型安全性を改善する。

元の規定への影響  

確定している機能の削除となる。

参考

元の規定は,

"

言語では廃止予定事項

%!!

になっている。

移行の難易性  

構文上の変形によって移行できる。明示的関数宣言を生成する装置が商業的に広く利用されている。

利用頻度  

頻繁にある。

#

及び

#

改変内容  

型は,宣言の中で宣言しなければならず,式の中で宣言してはならない。

"

言語では,

$

の式 又は

キャスト式で新しい型を作成してもよい。

%

!

Q

&R

! .&

この例は,新しい型

を宣言している。

改変理由  

ソースコード 内の宣言のある場所を明確にするのに役立つ。

元の規定への影響  

確定している機能の削除となる。

移行の難易性  

構文上の変形によって移行できる。

利用頻度  

稀である。

#(

#)

及び

#

改変内容  

条件式,代入式 又は コンマ式の結果は,左辺値となりうる。

改変理由  

"##

は,オブジェクト指向言語の一つであり,左辺値を比較的重要視している。例えば ,関数は,左辺

値を返してもよい。

元の規定への影響  

確定している機能に対する意味の変更となる。左辺値から右辺値への変換に暗黙に依存している

"

言語の式は,異なった結果を得ることになる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

##

附属書

"

SL..T&

$. 

この例は,

"##

では

となるが,

"

では,

$! 

となる。

移行の難易性  

プログラムの該当する右辺値に,明示的なキャストを付けなければならない。

利用頻度  

稀である。

(

(

及び

((

!<

文 及び

文)

改変内容  

明示的 又は 暗黙的な初期化子をもつ宣言を飛び越すことは,不当になる。ただし ,ブロック全体を飛び

越してその中に入らない場合は,この限りではない。

改変理由  

初期化子の中のコンストラクタが,そのブロックを出るときに解体の必要があった資源を割り付ける場合

がある。初期化子を飛び越すことを許した場合,実行時の割付けの決定が複雑になる。更に,初期化されないオブジェ

クトを使うことは,災いの元になる。この単純な翻訳時規則によって,初期化されるべき変数が有効範囲にある場合,

それが疑いなく初期化されていることが保証される。

元の規定への影響  

確定している機能の削除となる。

移行の難易性  

意味的な変形による

利用頻度  

稀である。

((

改変内容  

値を返却すると宣言した関数から,実際には値を返却しないで( 明示的 又は 暗黙的に )戻った場合,不

当になる。

改変理由  

呼出し元 及び 呼出し先は,クラスオブジェクトを返却するために,かなり精巧な値返却の機構を前提と

している。ある制御の流れによって返却値を指定しない戻りが起こりうる場合,処理系は,非常に複雑なものになる。

また,ある型の返却値を約束しておいてそういう値を返却しないのは,これまで常に疑問のあるやり方と考えられて

きたし,非常に古い

"

言語が

の関数と

の関数を区別しないという理由だけによって耐えうるものであった。

元の規定への影響  

確定している機能の削除となる。

移行の難易性  

意味的な変形による。そういうソースコード に対しは,適当な返却値( 例えば ,

)を付加する。

利用頻度  

稀である。数年来,多くの

"

言語の処理系は,この場合に対し警告を生成している。

#

)

宣言

)

改変内容  

指定子

又は

は,

"##

言語では オブジェクト 又は 関数の名前にしか適用してはならな

い。型宣言にこれらの指定子を使うのは,

"##

言語では不当になる。

"

言語では,これらの指定子を型宣言に使っ

た場合,無視される。

F

Q

''

7

言語では正当,

7))

言語では不当

&

''

(((

R&

改変理由  

記憶域種別指定子は,型に関連しては意味をもたない。

"##

言語では,クラスメンバは,記憶域種別指

定子

を使って定義することができる。記憶域種別指定子を型宣言に許すと,利用者にコード の混乱を招く。

元の規定への影響  

確定している機能の削除となる。

移行の難易性  

構文上の変形によって移行できる。

利用頻度  

稀である。

)

改変内容  

"##

言語の型定義名は,同じ有効範囲内のすべてのクラスの型名と異なっていなければならない(ただ

し ,その同じ型定義名をもつクラス名の同義語の場合を除く。)

"

言語では,同じ有効範囲に宣言された型定義名と

構造体のタグ名とが同じ名前をもっていてもよい( 二つは,異なる名前空間をもつ。)

L

Q

'!(((!'

R

L&

''

7

言語 及び

7))

言語で正当

Q

'!(((!'

R&

&

''

7

言語では正当,

7))

言語では不当

改変理由  

"##

言語では,使い易さのために,型名をオブジェクト宣言 又は 型のキャストに使う場合に,キーワー

又は

を接頭語として付けることを要求していない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

##

附属書

"

Q

'!(((!'

R&

&

''

は,

という型をもつ。

元の規定への影響  

確定している機能の削除となる。

移行の難易性  

意味的な変形による。二つの型の一方の名前を付け替えなければならない。。

利用頻度  

稀である。

)#

#

参照)

改変内容  

定値オブジェクトは,

"##

言語では初期化しなければならないが,

"

言語では初期化しなくてもよい。

改変理由  

定値オブジェクトは,値が代入されることがないので,有効な値をもつように初期化しなければならない。

元の規定への影響  

確定している機能の削除となる。

移行の難易性  

意味的な変形による。

利用頻度  

稀である。

)#

( 型指定子)

改変内容  

暗黙の

を禁止する。

"##

言語では,宣言指定子列に型指定子を指定しなければならない。次の左側

の例は,正当な

"

プログラムである。右側の例は,それと同等な

"##

プログラムである。

 &

 &

%

*&

%

*&

'!

(((

!'

'!

(((

!'

改変理由  

"##

言語では,暗黙の

を許すと,関数表記のキャストを含む式なのか宣言なのかというあいまいさ

を生じる機会が増える。明示的に宣言する方法が,本来あるべき流儀だと考えられるようになった。

"

言語の改訂版

では,暗黙の

が削除された。

元の規定への影響  

確定している機能の削除となる。

移行の難易性  

構文上の変形によって移行できる。自動的に変更することもできる。

利用頻度  

頻繁にある。

)

改変内容  

"##

言語では,列挙型のオブジェクトには,同じ列挙型の値しか代入してはならない。

"

言語では,列

挙型のオブジェクトに,すべての汎整数型の値を代入することができる。

Q

R&

%

L&

''

7

言語では正当,

7))

言語では不当

改変理由  

型の安全性を改善する。

元の規定への影響  

確定している機能の削除となる。

移行の難易性  

構文上の変形によって移行できる。こういう代入に対して発生する型エラーは,明示的キャストを用

いて自動的に修正できる。

利用頻度  

頻繁にある。

)

改変内容  

"##

言語では,列挙子の型はそれの列挙体としている。

"

言語では,列挙子の型は

である。

Q

6

R&

$6 

%%

''

7

言語の場合

$6 

%%

''

7))

言語の場合

'!

は必ずしも

と等しくはない

!'

改変理由  

"##

言語では,列挙体は,区別された型の一つである。

元の規定への影響  

意味的に適切に定義されたプログラムの変更が必要となる。

移行の難易性  

意味的な変形による

利用頻度  

稀である。この影響が出るのは,

"

言語のコード で列挙子の大きさを得ようとする場合だけである。列挙

子の大きさを得ることは,

"

言語の書き方として稀である。

(

宣言子

#

改変内容  

"##

言語では,空の仮引数並びを使って宣言した関数は,実引数を取らない。

"

言語では,空の仮引数

並びは,関数の実引数の数 及び 型が不明ということを意味する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

##

附属書

"

 &

''

7))

言語では,

という意味

''

7

言語では,

不明

という意味

改変理由  

これによって,誤った関数呼出し( すなわち,間違った数 又は 型の実引数をもつ関数の呼出し )を防止

する。

元の規定への影響  

意味規則上適切に定義されたプログラムの変更が必要となる。

"

言語では

:

廃止予定事項

;

とし

ている。

移行の難易性  

構文上の変形によって移行できる。

"

言語の不完全宣言流儀の関数宣言は,完全なひな型の宣言にし

なければならない。その同じ(ひな型ではない)関数に対し異なった数 又は 型をもつ関数呼出しがある場合には,プ

ログラムの更なる修正が必要となる。

利用頻度  

頻繁にある。

#

#

参照)

改変内容  

"##

言語では,返却値 又は 仮引数の型の中で型を定義してはならない。

"

言語では許される。

F

Q

&

R

QR

''

7

言語では正当,

7))

言語では不当

8

Q

7

R

QR

''

7

言語では正当,

7))

言語では不当

改変理由  

異なる翻訳単位で型を比較するとき,

"##

言語では名前の同等性に頼り,

"

言語では構造的同等性に頼

る。仮引数の型に関して述べると,仮引数並びの中で定義される型は,その関数の有効範囲の中にあるとみなされる

で,

"##

言語での唯一合法な呼出しは,その関数自身の中からだけになってしまう。

元の規定への影響  

確定している機能の削除となる。

移行の難易性  

意味的な変形による。こういう型定義は,ファイル有効範囲に移すか,ヘッダファイルの中に入れる

かしなければならない。

利用頻度  

稀である。こういう型定義の方法は,よくない流儀とされている。

改変内容  

"##

言語では,関数定義の構文から

:

古い流儀

;

"

言語の関数を排除している。

"

言語の

:

古い流儀

;

の構文は,

"

言語で許されてはいるが,廃止予定事項としている。

改変理由  

ひな型の指定が型安全性にとって必須である。

元の規定への影響  

確定している機能の削除となる。

移行の難易性  

構文上の変形によって移行できる。

利用頻度  

古いプログラムでは頻繁にあったが,すでに廃止予定事項として知られている。

#

改変内容  

"##

言語では,文字の配列を文字列で初期化する場合,文字列内の数( 終端記号の

4.

を含めて )が配

列要素の数を超えてはならない。

"

言語では,配列が文字列を格納するのに十分な大きさでない場合であっても,配

列を文字列で初期化することができる。

SMT

%

YY&

''

7

言語では正当,

7))

言語では不当

改変理由  

このような終端記号のない配列を標準の文字列ライブラリで扱うとき,重大な破局を引き起こす可能性が

ある。

元の規定への影響  

確定している機能の削除となる。

移行の難易性  

意味的な変形による。こういう配列は,終端記号の

4.

を格納すべく

要素分大きく宣言しなければ

ならない。

利用頻度  

稀である。こういう配列の初期化の方法は,よくない流儀とされている。

)

*

クラス

*

)

参照)

改変内容  

"##

言語では,クラス宣言によってその宣言された有効範囲にクラス名を導入し ,それを囲む有効範囲

内では,その名前をもつオブジェクト,関数 などの宣言を隠ぺいする。

"

言語では,内側の有効範囲にある構造体の

タグ名の宣言が,外側の有効範囲にあるオブジェクト 又は 関数の名前を隠ぺいすることはない。

SOOT&

Q

Q

&

R&

$ &

'!

7

言語では,配列

の大きさとなる。

!'

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

###

附属書

"

'!

7))

言語では,構造体

の大きさとなる。

!'

R

改変理由  

これは,

"##

言語の新しい名前空間の規定に由来する

"

言語と

"##

言語の間の数少ない非互換項目の

一つである。一つの名前は,一つの有効範囲の中で,型としても非型としても宣言できるので,非型の名前が型の名

前を隠ぺいすることが起きるので,型の名前を参照するときには,キーワード の

又は

を用いる必要がある。この新しい名前空間の規定によって,

"##

言語のプログラマは,重要な表記法上の利便さを

享受でき,利用者定義の型を組込みの型と最大限同じように使用できるようになる。この新しい名前空間の規定の利

点のほうが,

"

言語との非互換性よりも圧倒的に価値があると判断された。

元の規定への影響  

確定している機能に対する意味の変更となる。

移行の難易性  

意味的な変形による。アクセスする必要があるが隠ぺいされている名前が,大域的有効範囲にある場

合には,

"##

言語の演算子

33

を使うことができる。隠ぺいされている名前がブロック有効範囲にある場合には,型

名 又は 構造体のタグ名のいずれかを付け替えなければならない。

利用頻度  

稀である。

*)

改変内容  

"##

言語では,入れ子になったクラスの名前は,それを囲むクラスに局所的に属する。

"

言語では,入

れ子になったクラスの名前は,それを囲む最外側のクラスの名前と同じ有効範囲に属する。

5

Q

J

Q

'!

(((

!'

R

&

R&

J

&

''

7

言語では正当,

7))

言語では不当

改変理由  

"##

言語のクラスには メンバ関数があり,それがクラスの有効範囲を必要とする。

"

言語の規則では,

クラスには不完全な有効範囲管理機構しかないので,

"##

言語プログラマがクラスの局所性を管理できない。

"##

言語にも,

"

言語の規則に基づく有効範囲の規則をそのまま導入したとすると非常に複雑なものになり,

"##

言語

プログラマには,入れ子の関数 又は 局所的な関数を含んだプログラム例の意味を自信をもって言い当てることがで

きなかったであろう。

元の規定への影響  

確定している機能に対する意味の変更となる。

移行の難易性  

意味的な変形による。構造体の型名を,それを囲む構造体の有効範囲の中で可視にするには,その構

造体のタグを,それを囲む構造体の有効範囲の中で,それを囲む構造体が定義される前に宣言できればよい。

J&

''

構造体

J

と 構造体

5

とは,同じ有効範囲にある。

5

Q

J

Q

'!

(((

!'

R

&

R&

"

言語の構造体の型の定義が,他の構造体の定義に囲まれており,それを囲む構造体の外側でアクセスされる場合,

その構造体の型の定義は,それを囲む構造体の有効範囲に移出できる。

参考

このことは,有効範囲の規則の差異からの帰結である(

参照)

利用頻度  

稀である。

**

改変内容  

"##

言語では,型定義名は,クラス宣言の中で使った後で,そのクラス宣言の中で再定義してはなら

ない。

<&

F

Q

<

&

<&

''

7

言語では正当,

7))

言語では不当

R&

改変理由  

クラスの構造が複雑になったとき,型を使った後で再定義することを許すと,

"##

プログラマにとって

は,上の

<

の実際の意味が何かについて混乱を来たす。

元の規定への影響  

確定している機能の削除となる。

移行の難易性  

意味的な変形による。型 又は 構造体メンバのいずれかの名前を付け変えなければならない。。

利用頻度  

稀である。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

##(

附属書

"

特殊メンバ関数

( クラスオブジェクトのコピー)

改変内容  

揮発オブジェクトのコピーを改変する。暗黙宣言されたコピーコンストラクタ 及び 暗黙宣言されたコピー

代入演算子は,揮発性の左辺値をコピーすることはできない。

次の例は,

"

言語では正当である。

5

Q

&

R&

5

+&

5

*

%

Q.R&

L

%

*&

''

7))

言語では不当

+

%

*&

''

これも

7))

言語では不当

改変理由  

代替案について長い間議論された。

50

の仮引数を変更するのは,クラスオブジェクト

の効率的コード の生成を非常に複雑にする。暗黙定義のコピーコンストラクタとコピー代入演算子とに別々の記号を

導入することを議論したが,そうすることによってあいまいさが生じること 並びに 基底 及び メンバに従ってこれら

の演算子の編成を構成する規則の与え方が複雑になること,という答えられない問題を引き起こした。

元の規定への影響  

確定している機能の削除となる。

移行の難易性  

意味的な変形による。意味的に揮発が要求される場合には,利用者定義のコンストラクタ 又は 代入

を提供しなければならない。意味的に非揮発が要求される場合には,明示的に

を使うことができる。

利用頻度  

稀である。

*

(

前処理指令

(

(あらかじめ定義されたマクロ名)

改変内容  

F#7

が定義されているかいないかの区別,及び 定義されて場合の値は,処理系定義とする。

改変理由  

"##

言語は,

"

言語と同一ではない。

F#7

を定義することを必須とすると,処理系に正し くない

警告を発することを強制することになる。各処理系は,その市場に最も有用になるような動作を選択しなければなら

ない。

元の規定への影響  

確定している機能に対する意味の変更となる。

移行の難易性  

意味的な変形による

利用頻度  

F#7

を参照するプログラム 及び ヘッダは,非常に多い。

標準

ライブラリ

では,標準

"

ライブラリから取り込んだ

"##

標準ライブラリの内容をまとめる。また,定義,宣言 又は 動

作について,

6

&'()*'()+

からの明白な差異をまとめる(

)

及び

参照)

"##

標準ライブラリは,標準

"

ライブラリからの

個の標準のマクロを提供する。それらを

*#

に示す。

ヘッダ名(

及び

で囲んだもの )は,複数のヘッダ内で定義されていることを示す。それらの定義は,すべて等

しい(

参照)

*#

 標準のマクロ

;G:8

H6?

AG??

F<:<??

"G9F<K

?7

6??

AG??

F<:<A

7?B7>F

C8E

F87

?7

7B??68

AG??

F<:F8:H

8#B@

?7

7JC8

F<:8E@

I7;6E

@65

8B9

?7

@BA86EJ

E6A#

@65

F<:

#9?

I7;6E

@<A

8E6A:8

?7

AG@8E<7

F88>

7GE

F<:

8EE

I8B9

?7

<@8

F88>

8A#

F<:

<:A

I8B9

85<

96<?GE8

?

F88>

F8

<B9"9

85<

FG778FF

@"

7GE

@65

<B?"9

9<?8A6@8

@65

AG??

F<:6"E

<BA"9

9BC8A

@65

AG??

F<:9C8

@C

@65

"##

標準ライブラリは,標準

"

ライブラリからの

個の標準値を提供する。それらを

*(

に示す。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

##)

附属書

"

*(

 標準の値

7;6E

"<

9?

#<:

<A

@<A

@"

?8A

@65

7;6E

@65

9?

8CF<?BA

?#"?

#<:

F7;6E

@65

7;6E

@<A

9?

@6A

#<:

?#"?

8CF<?BA

F7;6E

@<A

#"?

#<:

9?

@65

?#"?

@6A

#<:

F;E

@65

#"?

8CF<?BA

9?

@65

L.

85C

?#"?

@65

F;E

@<A

#"?

@6A

#<:

9?

@65

85C

?#"?

@65

L.

85C

G7;6E

@65

#"?

@65

9?

@<A

?#"?

@65

85C

G<A

@65

#"?

@65

L.

85C

9?

@<A

L.

85C

?#"?

@<A

G?BA:

@65

#"?

@65

85C

9?

@<A

85C

?#"?

@<A

L.

85C

GF;E

@65

#"?

@<A

9?

E6#<5

?#"?

@<A

85C

#"?

@<A

L.

85C

9?

EBGA#F

?BA:

@65

#"?

@<A

85C

<A

@65

?BA:

@<A

"##

標準ライブラリは,標準

"

ライブラリからの

個の標準の型を提供する。それらを

*)

に示す。

*)

 標準の型

$

$

9<?8

$

$

"##

標準ライブラリは,標準

"

ライブラリからの

個の標準の構造体を提供する。それらを

*

に示す。

*

 標準の構造体

"##

標準ライブラリは,標準

"

ライブラリからの

個の標準の関数を提供する。それらを

**

に示す。

**

 標準の関数

+

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

##

附属書

"

**

 標準の関数(続き)

L.

ヘッダに対する変更

"##

標準ライブラリは,標準

"

ライブラリとの互換性のため,

個の

"

のヘッダ(

5#

)を提供するが,これ

らは,

"##

では推奨しない。

定義に対する変更

は,この規格ではキーワード の一つとし ている(

参照 )。それは,

及び

のいずれにも,定義された型として現れない(

参照)

ヘッダ

-M-(

字句

及び

は,この規格ではキーワード

としている(

参照)

。それらは,

-M-

の中に定義されたマクロとして現れない。

マクロ

AG??

及び

のいずれにも定義されて

いるマクロ

AG??

は,この規格では,処理系定義の空ポインタ定数としている(

参照)

宣言に対する変更

ヘッダ

の中の次の関数は,

"

言語のヘッダ

(

とは異なった宣言をもつ。

その差異は,

で規定する。

動作についての変更

ヘッダ

の中の次の関数は,

"

言語のヘッダ

(

とは動作が異なっている。

その差異は,

で規定する。

ヘッダ

の中の次の関数は,

"

言語のヘッダ

(

とは動作が異なっている。その差異は,

)

で規定する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

##*

附属書

"

マクロ

V

この規格では,

に定義されているマクロ

の実引数

が受け付ける型に制限がある。その

差異は,

で規定する。

メモリ割付け関数

この規格では,関数

及び

には制限がある。その差異は,

(

で規定する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

#(

附属書

*

附属書

( 規定)  互換性

ここでは,既存の処理系との互換性を保つために規定した

"##

規格での機能について説明する。

これらの機能は,現在のこの規格で規定としてはいるが,使うことを推奨しない。これらの機能は,将来の改定版

に残ることが保証されていない。

5

真理値を演算対象とする増加演算子

%

型を演算子

))

の演算対象とするのは,推奨しない(

#

及び

#(

参照)

5

キーワード

名前空間有効範囲内にオブジェクトを宣言するとき,キーワード

を使うのは,推

奨しない(

#

参照)

5

アクセス宣言

アクセス宣言は,推奨しない(

参照)

5

定値文字列からの暗黙変換

文字列リテラルに対し,定値から非定値へ暗黙変換することは,推奨しない(

参照)

5#

標準

ライブラリ ヘッダ

標準

"

ライブラリとの互換性のため,

"##

標準ライブラリは,

に示す

個の言語

"

のヘッダを提供している。

 言語

のヘッダ

(

-M-(

(

(

(

(

(

(

(

(

(

(

(

(

(

(

(

(

それぞれの

"

ヘッダは,その名前を

としたとき

:(;

の形式をしている。それぞれに対応して,標準

"##

ライブラリの名前空間内に置かれた

:;

というヘッダが,名前空間

の名前空間有効範囲の中にも置

かれ,その後に明示的に《

 !

指令》

)

)が指定されているかのように振る舞う。

ヘッダ

は,名前空間

の中に,その宣言 及び 定義を提供する。ヘッダ

(

は,

"

標準と同じく,これらを大域的名前空間でも利用可能にする。

5(

の古いメンバ

次に示すメンバ名が,

)

で規定した名前に追加される。

Q

P

Q

3

L

P&

+

P&

*

P&

B99P

&

CBFP

&

''

このほかは,変更しない。

R&

R

は,整数型(ここでは

L

で表す。)の同義語とし ,あるメンバ関数が型

を仮引数とする他

の関数に対する多重定義を与え,それと同じ動作をすることを許す。

は,整数型(ここでは

+

で表す。)の同義語とし ,あるメンバ関数が型

を仮引数とする

他の関数に対する多重定義を与え,それと同じ動作をすることを許す。

は,整数型(ここでは

*

で表す。)の同義語とし ,あるメンバ関数が型

仮引数とする他の

関数に対する多重定義を与え,それと同じ動作をすることを許す。

は,処理系定義の型とし ,型

B99

の要件(

)を満たす。

は,処理系定義の型とし ,型

CBF

の要件(

)を満たす。

処理系は,次のメンバ関数を付加してもよい。それは,

)#

)を呼び出す効果をもつ。

Q

%

P

P

Q

3

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#(

附属書

*

 &

''

このほかは,変更しない。

R&

R

処理系は,次のメンバ関数を付加してもよい。それは,

)

に規定する呼出し情報の多重定義となる。

Q

P

Q

3

P

 &

P

 &

P

&

''

このほかは,変更しない。

R&

P

Q

3

''

このほかは,変更しない。

R&

%

P

P

Q

3

P

P

P33P

P33P

%

P33

1

P33 &

P

P

P33P

 &

''

このほかは,変更しない。

R&

%

P

P

3

P

Q

3

P

!

!

P33P

 &

''

このほかは,変更しない。

R&

%

P

P

3

P

Q

3

!

P33P

 &

''

このほかは,変更しない。

R&

%

P

P

3

P

Q

3

!

P33P

 &

''

このほかは,変更しない。

R&

R

これらの関数は,

)

で規定される,それぞれに対応するメンバ関数を呼び出す効果をもつ。

5)

!

のスト リーム

ヘッダ

は,文字配列オブジェクトをもつストリームバッファに関係する

三つの型を定義し ,そういうオブジェクトの読書きに役立つ。

5)

クラス

Q

3

P

Q

3

$

$P

%

. &

!

!P

$

P

  

!P

!

  &

!

$

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#(

附属書

*

!

P

%

. &

!

$

 &

!

$

!

P

%

. &

!

$

 &

!

$

!

P

%

. &

!

$

 &

X &

$

$

%

 &

!

 &

 &

3

P

P

%

8B9 &

P

P

%

8B9 &

P

 &

P

P

P33

P33

%

P33

1

P33 &

P

P

P33

%

P33

1

P33 &

!

!

$

 &

3

''

L

&

説明のためだけ

''

&

説明のためだけ

''

&

説明のためだけ

''

&

説明のためだけ

''

$&

説明のためだけ

''

&

説明のためだけ

''

$

$&

説明のためだけ

''

!

! $P 

&

説明のためだけ

''

! ! 

&

説明のためだけ

R&

R

クラス

は,入力列( 出力列の場合もある。)と,文字配列の型をもつオブジェクトとを結び付ける。

ここで,文字配列の型とは,任意の値を格納する要素をもつ型を指す。その配列オブジェクトには,種々の属性がある。

参考

説明のため,これらは,

というビットマスク型(ここでは,

L

とする。)の配列要素として

表現する。

動的な配列オブジェクトが割り付けられたときセットされる。したがって,

オブジェクトのデストラクタによって開放されなければならない。

配列オブジェクトが定値の要素をもつときセットされる。したがって,出力列に書

いてはならない。

配列オブジェクトが,長さが変化する文字列を保持するためとして割り付けられた

とき,又は 再割付けされたときにセットされる。

$

その配列オブジェクトは,変更,再割付け 及び 開放をしてはならないとプログラム

から要求するとき,セットする。

参考

説明のため,維持されるデータを次に示す。

のオブジェクトに関係する配列オブジェクトの属性

$

動的配列オブジェクトの最小の大きさの提案値

!

! $

動的配列オブジェクトを割り付けるために呼び出す関数へのポ

インタ

! ! 

動的配列オブジェクトを開放するために呼び出す関数へのポインタ

クラス

の各オブジェクトは,シークできる領域をもつ。シーク範囲は,ポ インタ

及び

で定められる。

が空ポインタの場合,シークできる領域は,未定義とする。そうでない場合,

は,

と等しくなり,

は,

が空ポインタのとき

となり,そうでないとき

となる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

#(

附属書

*

5)

のコンスト ラクタ

 '

'

,

効果  

クラス

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

を使ってその基底クラスを初期化する。この関

数の事後条件を

に示す。

$

の効果

要素

値  

$

$

空ポインタ

空ポインタ

 !$

 $ '(

!

 $ !$

効果  

クラス

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

を使ってその基底クラスを初期化する。この関

数の事後条件を

に示す。

!

! $

 

! !  

の効果

要素

値  

$

未規定の値

 $

(

'

(

$

,

$

(

'

(

$

,

$

(

'

(

$

,

効果  

クラス

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

を使ってその基底クラスを初期化する。この関

数の事後条件を

に示す。

!

$

の効果

要素

値  

$

未規定の値

空ポインタ

空ポインタ

は,配列オブジェクトの先頭要素を指さなければならない。要素数

は,次のようにして決まる。

.

のとき,

は,

となる。

%%

.

のとき,

は,

33

となる。

.

のとき,

は,

<A

@65

となる。

が空ポインタの場合,次の関数を実行する。

P

)

A &

そうでない場合,次の関数を実行する。

関数

?

の呼出し情報は,

4

に宣言されている(

参照)

。マクロ

!"#

は,

に定義

されている(

参照)

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#(

附属書

*

P &

P

)

A &

$

(

'

$

(

'

$

(

'

効果  

!

と同じ 動作を行う。ただし ,コン スト ラクタが

の中の

をセットすることが異なる。

!

.

効果  

クラス

のオブジェクトを解体する。この関数は,

0

でなく,

0

$

の場合に限り,動的割付けされた配列オブジェクトを解放する。

5)

に,動的割付けされた配列

オブジェクトを解放する仕方を規定している。)

5)

メンバ関数

!

'

'

,

効果  

0

でない場合,動的配列オブジェクトの凍結状態(

$

)を変更する。

$

の場合,この関数は

$

をセットする。

そうでない場合,

$

をクリアする。

$

効果  

関数

を呼び出す。その後,入力列の先頭を指すポインタ

を返却する。

参考

返却値は,空ポインタ値となることがある。

効果  

出力列に対する次の位置を指すポインタ

が空ポインタの場合,

を返却する。そうでない場合,その

配列オブジェクトの現在の有効長( 出力列の次の位置を指すポインタから先頭を指すポインタを引いた値,すなわち

-

)を返却する。

5)

の上書き仮想関数

!

,

C9>

効果  

が示す文字を,可能ならば ,次の二つの方法のいずれかによって,出力列に付加する。

8B9

でない場合であって,出力列に出力可能な位置があるとき 又は この関数によって出力可能な位

置が作れる( 下に規定する。)ときには,

!))

に代入する。

返却値  

を返却する。

8B9

の場合,文字は付加されない。

返却値  

8B9

ではない値を返却する。

返却値  

失敗した場合には,

8B9

を返却する。

参考

この関数は,毎回の呼出しの結果として,書込み可能な位置の数を更新する。書込み位置を可能にする

ために,この関数は,現在の配列オブジェクト( もし ,あれば )を保持し ,かつ 少なくとも一つの書込

み位置を増やすのに十分な数(

とする。)の要素をもつ配列オブジェクトを再割付けする( 又は 初期割

付けする。)

。どれだけの数を増加させるかは,未規定とする

が空ポインタでない場合,こ

の関数は,新しい動的配列オブジェクトを割り付けるために関数

!  

を呼び出す。そうでない

場合,式

ST

を評価する。いずれの場合であっても,割付けが失敗したときは,この関数は,

8B9

を返却する。そうでないときは,

をセットする。

既存の動的配列オブジェクト( 先頭要素のアドレスを

とする。)を解放するため,

が空ポインタでない場

合には,関数

!  

を呼び出し ,そうでない場合には,式

ST

を評価する。

0

であるか 又は

0

$

でない場合,この関数は,書込み位置を利用可

能にするための配列拡張( より長い配列を再割付けすること )ができない。

処理系は,この決定に当たり,

-

を考慮しなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

#(#

附属書

*

4

,

C9>

が示す文字を,可能ならば ,次の三つの方法のいずれかによって,入力列に書き戻す。

8B9

ではない場合であって,入力列の書戻し位置が書戻し可能であるとき,及び

%%

SVLT

であるときには,

を代入する。

返却値  

を返却する。

8B9

ではない場合であって,入力列の書戻し位置が書戻し可能であるとき,及び

0

であるときには,

!VV

に代入する。

返却値  

を返却する。

8B9

である場合であって,入力列の書戻し位置が書戻し可能であるときには,

代入する。

返却値  

8B9

ではない値を返却する。

返却値  

失敗を示すために,

8B9

を返却する。

参考

この関数が複数の方法を実施できる場合,どの方法にするかは未規定とする。この関数は,毎回の呼出

しの結果として,書戻し可能な位置の個数を更新することができる。

効果  

可能ならば ,ストリーム位置を変更しないで,入力列から

文字読み出す。

入力列の読出し位置が読出し可能であれば,この関数は,

!

を返却して,成功を

伝える。

そうでない場合,現在の書込み位置の次の位置

が空ポインタでなく,現在の読出し最終位置

より大きいとき,

より大きく

より大きくない値を

に代入することによって,読出し位

置を読出し可能にする。

返却値  

!

を返却する。

返却値  

失敗を示すために

8B9

を返却する。

参考

この関数は,毎回の呼出しの結果として,可能な読出し位置の個数を更新することができる。

4

(

4

(

,

H

この関数は,可能ならば

に示す方法で,制御される列の一つの中のストリーム位置を変更する。

の位置付け

条件

結果  

0

33 

[%

.

の場合

入力列を位置付ける。

0

33 

[%

.

の場合

出力列を位置付ける。

0

33

1

33  

入力列 及び 出力列の両者を

%%

33

1

33 

であって,

位置付ける。

33

又は

33

の場合

そうでない場合

位置付け操作は,失敗とする。

位置付けされる列に対し,その次へのポインタが空ポインタの場合,位置付け操作は失敗とする。そうでない場合,

この関数は,

#

に示すように

の値を決める。

#

の値

条件

の値  

QQ

33

QQ

33

次へのポインタから先頭へのポインタ

を引いた値(

-

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

#((

附属書

*

#

の値( 続き)

条件

の値  

QQ

33

から先頭へのポインタ

を引いた値(

-

)

位置付け操作は,失敗とする。

V

又は

V

)

そうでない場合,この関数は,次の位置を指すポインタ

に,

#

#

を代入する。

返却値  

を返却する。それは,可能ならば,結果のストリーム位置を格納するための結果のオフ

セット( 型

の)

から作られる。位置付け操作が失敗した場合 又は 構築されたオブジェクトが結果

のストリーム位置を表現できない場合,返却値は,

VL  

となる。

4

(

&&

,

&&

H

&&

効果  

制御される列の一つの中のストリーム位置を,可能ならば,

に対応するように変更する( 変更の仕方の詳細

は,次に説明する。)

0

33

でない場合,入力列を位置付ける。

0

33

でない場合,出力列を位置付ける。

この関数がいずれの列も位置付けしない場合,位置付け操作は,失敗とする。

位置付け対象の列に対し ,その次へのポインタが空ポインタの場合,位置付け操作は,失敗とする。そうでない場

合,

を呼出しその結果を

の値とする。

が不当なストリーム位置であるか,負の値であるか 又は

-

より大きい値の

場合,位置付け操作は,失敗とする。

そうでない場合,この関数は,先頭ポインタ

を加算し ,結果を次へのポインタ

格納する。

返却値  

を返却する。ここで,

( 型

)は,結果のストリーム位置を格納した

結果のオフセットとする。位置付け操作が失敗した場合 又は 構築されたオブジェクトが結果のストリーム位置を表

現できない場合,返却値は,

VL  

とする。

/0$

 $

(

'

効果  

. . 

が効果がないことを除き,処理系定義とする。

5)

クラス

Q

3

P

Q

3

!

 &

!

 &

!

$

 &

!

$

 &

X &

!

&

! &

3

''

&

説明のためだけ

R&

R

クラス

は,クラス

のオブジェクトの読出しを行う。それに関連する配列オブジェクト

を制御するための

オブジェクトを提供する。説明のためにいえば,上の例で保持されるデータは,

オブジェクト )である。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#()

附属書

*

5)

のコンスト ラクタ

$

 $

効果  

クラス

のオブジェクトを構築し ,その基底クラスを

によって初期化し ,

によって初期化する。

は,

)+4/

の先頭要素を指していなければならない。

$

(

'

効果  

クラス

のオブジェクトを構築し ,その基底クラスを

によって初期化し ,

によって初期化する。

は,要素数が

の長さの配列の先頭要素を指していなければならない。

は,ゼロより大きくなければならない。

5)

メンバ関数

$

返却値  

0

を返す。

$

返却値  

 V 

を返す。

5)

クラス

Q

3

P

Q

3

 &

!

P33

%

P33 &

X &

!

&

$

$

%

 &

!

 &

&

3

''

&

説明のためだけ

R&

R

クラス

は,クラス

のオブジェクトの書込みを行う。それに関連する配列オブジェクト

を制御するための

オブジェクトを提供する。説明のためにいえば,上の例で保持されるデータは,

オブジェクト )である。

5)

のコンスト ラクタ

効果  

クラス

のオブジェクトを構築し ,その基底クラスを

によって初期化し ,

によって初期化する。

 $

(

(

&&

,

&&

効果  

クラス

のオブジェクトを構築し ,その基底クラスを

で初期化し ,

を次の二つ

のコンストラクタのいずれかによって初期化する。

0

の場合,

は,要素数が

の配列の先頭要素を指していなければならない。コンスト

ラクタは,

となる

E

0

でない場合,

は,

)+4/

を含む要素数

の配列の先頭要素を指していなければなら

ない。コンストラクタは,

)

33  

となる。

この関数の呼出し情報

?

は,ヘッダ

4

に宣言されている(

参照)

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#(

附属書

*

5)

メンバ関数

$

返却値  

0

を返す。

!

'

'

,

効果  

 V$

$

を呼び出す。

$

返却値  

 V 

を返す。

返却値  

 V

を返す。

5)

クラス

Q

3

P

Q

3

''

P&

P

33

P

P&

P

33

P

P&

P

33

P

P&

''

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

 &

!

P33

%

P331P

3

3

 &

X &

''

メンバ

!

&

$

$

%

 &

&

!

 &

3

''

&

説明のためだけ

R&

R

クラス

は,クラス

のオブジェクトの読出し 及び 書込みを行う。それに関連する配列

オブジェクトを制御するための

オブジェクトを提供する。説明のためにいえば,上の例で保持される

データは,

オブジェクト )である。

5)

のコンスト ラクタ

効果  

クラス

のオブジェクトを構築し ,その基底クラスを

によって初期化する。

 $

(

(

&&

,

&&H&& 

効果  

クラス

のオブジェクトを構築し,その基底クラスを

で初期化し,

!%

を次の二つの

コンストラクタのいずれかで初期化する。

0

の場合,

は,要素数が

の配列の先頭要素を指していなければならない。コンスト

ラクタは,

となる

E

0

でない場合,

は,

)+4/

を含む要素数

の配列の先頭要素を指していなければなら

ない。コンストラクタは,

)

33  

となる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

#(*

附属書

*

5)

のデスト ラクタ

!

.

効果  

クラス

のオブジェクトを解体する。

$

返却値  

0

を返す。

5)

の操作

!

'

'

,

効果  

 V$

$

を呼び出す。

$

返却値  

 V 

を返す。

返却値  

 V

を返す。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

#)

附属書

(

附属書

( 参考) 国際文字名

ここには,

"##

識別子中の国際文字名として正当な

進符号値の完全な一覧を示す。

次の一覧は,

61

 9

:

委員会が作成した

;51<

)(

から変更なしに再

掲したものである。ただし,

及び

の範囲は,英語のアルファベットの大文字 及び 小文字を

示すものであり,この規格の基本ソース文字集合の一部分なので,ここには再掲していない。

参考

原国際規格が参照している

;51<

は,

1<

の審議段階の作業文書であり,

日に発行され

た正式の

1<

)(

では,この一覧は大幅に改訂されている。

1<

は,

正式版の内容を変えることなく要約

6

の様式で発行したものである。

国際文字名

符号の範囲  

ラテン文字

3,

3

,

,

 ,

,

,

ギリシア文字

,

,

,

,

,

3

3,

3,

3,

3,

,

,

,

3,

,

3,

 ,

,

%,

3,

 3,

%,

%

%

,

,

,

3

3,

3

3%,

,

@

@,

@

@

キリール文字

3,

,

,

,

,

,

%

,

3

%,

,

アルメニア文字

,

ヘブライ文字

3

,

アラビア文字

,

,

% ,

%

%

,

,

デーヴァナー

,

  

ガリー文字

ベンガル文字

,

,

,

%,

%,

%

%,

3

33,

3

,

グルムキー文字

,

,

,

,

,

,

,

,

グジャラー

%,

3,

,

,

%,

%

%,

%

%,

  

ティ文字

オリヤー文字

%

%,

%

%,

%

%,

%

%,

%

%,

%

%,

%

%3,

%

%

タミル文字

%

%,

%

%,

%

%,

%

%,

%,

%

%,

%

%,

%

%,

%

%%,

%% 

%%

テルグ文字

,

,

,

,

,

カンナダ文字

,

,

,

%,

%

%,

マラヤーラム文字

3

3,

3

3,

3

3,

3

3,

3

3

タイ文字

,

,

,

%

ラオ文字

,

,

 ,

,

,

3,

 ,

,

,

,

 ,

,

%,

3

%,

%,

%,

%

3,

,

グルジア文字

,

3

平仮名

,

%

片仮名

ボポモフォ文字

ハングル文字

,

,

"HF

統合漢字

3,

%

%,

%

%,

%,

%

%,

%

%,

%

%%,

%

3

3,

3

3,

3

3 ,

3

3%,

 ,

 ,

,

@

@,

@

@,

@

@%

,

@

@ ,

@

@,

@3

@3 ,

@3

@3,

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。