JIS X 3014:2003 プログラム言語C++ | ページ 4

                                                                                                   #
参考 翻訳過程の第 段では,ソース入力に拡張文字が現れると,それを国際文字名に置き換える。したがっ
て,すべての拡張文字は,国際文字名の形で扱うことになる。しかし ,同じ結果をもたらすなら,実際の
処理系は,独自の文字集合を使用して差し支えない。
浮動小数点リテラル
浮動小数点リテラル3
小数点定数 指数部 浮動小数点接尾語
数字列 指数部 浮動小数点接尾語
小数点定数3
数字列 ( 数字列
数字列 (
指数部3
符号 数字列
8 符号 数字列
符号3 次のいずれか
) V
数字列3
数字
数字列 数字
浮動小数点接尾語3 次のいずれか
9 ・
浮動小数点リテラルは,整数部,小数点,小数部, 又は 8,及び 必要に応じて符号を付けた整数の指数部からな
進数字( 基数が
り,必要に応じて型を示す浮動小数点接尾語を置く。整数部 及び 小数部は,それぞれ, )の列
からなる。整数部 又は 小数部(の一方)は,省くことができる。小数点,又は 若し くは 8 及び それに続く指数
(の一方)は,省くことができる。整数部,省略可能な小数点 及び 省略可能な小数部は,その浮動小数点リテラルの
有効数値部!> 1 のべきを表す。乗じた値がその
となる。指数部は,もしあれば,有効数値部に乗じる
型の表現可能な大きさの範囲内にある場合,結果は,それが表現可能な値であればその乗じた値とする。そうでなけ
れば ,その乗じた値に最も近い表現可能な値とする。このとき,小さいほうから最も近い値をとるか,大きいほうか
らとるかは,処理系定義とする。浮動小数点リテラルの型は,浮動小数点接尾語を置いて明示してない限り,3
%
型とする。浮動小数点接尾語が 又は 9 である場合,その型は,5 型とする。浮動小数点接尾語が 又は ・ であ
る場合,その型は, 3 % 型とする。指数部による のべきを乗じた値がその型の表現可能な大きさの範囲内
にない場合,そのプログラムは,不適格とする。
文字列リテラル
文字列リテラル 3
Y ! 文字列 Y
・ Y ! 文字列 Y
!文字列3
!文字
!文字列 !文字
!文字3
二重引用符 Y ,逆斜線 4
及び 改行文字を除くソース文字集合の文字
逆斜線表記
国際文字名

――――― [JIS X 3014 pdf 16] ―――――

  (
7
2019 年
月 1 日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格(日本産業規格)」を「日本産業規格」に読み替えてください。
文字列リテラルは,文字の列( で規定する。)を二重引用符でくくる( 例えば,YE E E Y )
。その前に応じて英
字 ・ を置く( 例えば,・YE E E Y )こともある。・ を置かない通常の文字列リテラルを,ナロー文字列リテラルとも呼ぶ。
通常の文字列リテラルは,: 個の の配列; 型をもち,静的 ! 記憶域期間( ) )をもち,くくら
れた文字の列を初期値としてもつ。ここで, は文字列の長さ( 後で規定する。)とする。文字 ・ で始まる文字列リ
テラル( 例えば ,・YY )を,ワイド 文字列リテラルと呼ぶ。ワイド 文字列リテラルは,: 個の
の配列; 型をもち,静的記憶域期間( ) )をもち,くくられた文字の列を初期値としてもつ。
それぞれの文字列リテラルを別々に置く( すなわち,重なりのないオブジェクトとして割り付ける)かど うかは,
処理系定義とする。
翻訳過程の第 段( )で,隣り合うナロー文字列リテラルど うしを連結し ,隣り合うワイド 文字列リテラルど
うしを連結する。字句のナロー文字列リテラルとワイド 文字列リテラルとが隣り合う場合,その動作は,未定義とす
る。連結した文字列の中の文字は,それぞれ別々に扱う。
例 Y4 6Y Y"Y
これを連結した後の文字列は, 個の文字 Z4 6"Z とはな
6Z 及び Z"Z からなる( 個の 進文字 Z4

らない。)
必要な連結の後,翻訳過程の第段( )で,文字列を走査するプログラムがその終わりを検出できるように,す
べての文字列リテラルの終わりに Z4.Z を追加する。
文字列リテラルの中の,逆斜線表記 及び 国際文字名は,文字リテラル( )の中と同じ意味をもつ。ただし,
一重引用符 Z は,それ自身で表すことも逆斜線表記 4Z で表すこともできるが,二重引用符 Y には,4 を前置しなけ
ればならない。ナロー文字列リテラルの中では,国際文字名が多バイト符号化
% 3 に従って複数の
文字要素に変換されることがある。ワイド 文字列リテラルの長さは,逆斜線表記,国際文字名 及び その他の文字の
総個数に,末尾に付加した ・Z4.Z の分の を加えた値とする。ナロー文字列リテラルの長さは,逆斜線表記 及び そ
の他の文字の総個数に,それぞれの国際文字名の多バイト符号化結果のバイト数( 少なくとも )の総和,及び 末尾
に付加した Z4.Z の分の を加えた値とする。
# 真理値リテラル
真理値リテラル 3
真理値リテラルとは,予約語の 及び をいう。真理値リテラルの型は,% とする。真理値リテラル
は,左辺値をもたない。
基本概念
参考 ここでは,"## 言語の基本概念を与える。オブジェクトと名前との違いを説明し ,それらが左辺値
0 とどのように関係しているかを説明する。宣言
3 及び 定義3> の概念を導入
し,"## での型 1 ,有効範囲!1 ,結合I 及び 記憶域期間! 3 の概念を
提供する。プログラム実行の開始 及び 終了の機構を議論する。最後に,言語の基本型を説明し ,それら
から複合型1 3 1 を構成する方法を列挙する。
ここでは,言語の特定部分だけに関係する概念は,扱わない。それらは,それぞれ,関係する箇条で扱う。
実体 には,値,オブジェクト,部分オブジェクト,基底クラス部分オブジェクト,配列要素,変数,関数,
関数インスタンス ! ,列挙子,型,クラスメンバ !! % ,テンプレート,及び 名前空間が
ある。
名前 は,実体 又は ラベル% ( (( 及び ( )を表す識別子( )の挙用 ! をいう。変数
0% は,オブジェクトの宣言が作り出す。変数の名前は,そのオブジェクトを表す。
宣言 3 は,実体を表す名前をプログラムに導入する。ラベルを表す名前は, 文( (( ) 又は ラ
ベル付き文( ( )がプログラムに導入する。
型,クラス,列挙体 又は テンプレートを表す名前もある。一般に,名前を含んだプログラムを構文解析するには,
名前がこれらの実体を表しているかど うかを調べる必要がある。この処理過程を,名前検索
I 1( )と
呼ぶ。
二つの名前は,次のいずれかの場合に等しいとする。
― それらが同じ文字列からなる識別子である場合

――――― [JIS X 3014 pdf 17] ―――――

                                                                                                   )
― それらが同じ演算子に対して利用者が多重定義した演算子関数の名前である場合
― それらが同じ型に対して利用者が定義した変換関数の名前である場合
同じ識別子を複数の翻訳単位で使った場合,それぞれの翻訳単位で指定したその識別子の結合( # )にもよるが,
原則として,共通して同じ実体を表す。
宣言 及び 定義 宣言( ) )は,翻訳単位に名前を導入したり,すでに宣言で導入されている名前を再宣言する。
宣言は,名前の解釈 及び 属性を指定する。
宣言は,次の場合を除いて,定義3> という。
― 関数本体( )を指定せずに関数を宣言している場合
― ・ 指定子( ) ) 又は 《結合指定》 ( )# )を含んでいて, (
《初期化子》も《関数本体》 )も
含んでいない場合
― クラス宣言の中で静的データメンバ( * )を宣言している場合
― 型定義宣言( ) ),
《 ! ( ) ) 又は 《
宣言》 ! ( ) )の場合
指令》
例 次に示す宣言は, 個を除き,すべて定義となる。
& '' を定義する。
% L& '' を定義する。
Q )& R '' 及び を定義する。
F Q & & R '' F F33 及び F33 を定義する。
5 Q '' 5 を定義する。
& '' 非静的なデータメンバ を定義する。
& '' 静的なデータメンバ を宣言する。
5 3 . Q R '' 5 のコンストラクタを定義する。
R&
533 % L& '' 533 を定義する。
Q R& '' 及び を定義する。
A Q & R '' A 及び A33 を定義する。
AL % A& '' AL を定義する。
5 5& '' 5 を定義する。
次に示す宣言は,定義とはならない。
& '' を宣言する。
& '' を宣言する。
& '' を宣言する。
F& '' F を宣言する。
<& '' < を宣言する。
5 5& '' 5 を宣言する。
A33& '' A33 を宣言する。
参考 ),コピーコンストラクタ(
状況によって,メンバ関数の,省略時コンストラクタ( ),代入
演算子( ) 又は デストラクタ( )を "## 処理系が暗黙に定義することがある。
例 7 Q
& '' 標準ライブラリの クラス( +L( 参照)
R&
Q
7 &
7 % &
% &
R
この 7 に対して,処理系が必要な関数を暗黙に定義し ,次に示すのと同等な定義を与える。
7 Q
&
7 3 &
7 70 3 ( Q R
70 % 70 Q % (& !& R
X7 Q R
R&
注 宣言が《結合指定》の中の波括弧でくくった宣言列の内側にあっても,その宣言が定義であるかど うかには影響しない。

――――― [JIS X 3014 pdf 18] ―――――

   7
2019 年
月 1 日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格(日本産業規格)」を「日本産業規格」に読み替えてください。
参考 《詳述型指定子》によって暗黙に宣言されることがある( 参照)
クラス名は, 。
オブジェクトに対する定義が不完全型( * )のオブジェクトをもたらす場合,そのプログラムは,不適格とする。
単一定義規則 翻訳単位は,それぞれの変数,関数,クラス型,列挙型 又は テンプレートに対して, 個以上
の定義を含んでいてはならない。
式は,次のいずれかの場合を除いて,評価対象式
1 0 3 ・1!! という。
― 式が,汎整数定数式が必要な場所に書かれている。
― 式が,!J 演算子( # )の演算対象となっている。
― 式が,13 演算子の演算対象となっており,多相クラス型の左辺値を表していない。
オブジェクト 又は 非多重定義の関数は,その名前が評価対象式に現れていれば,挙用した
!3 という。仮想メン
バ関数は,それが純粋( )でなければ,挙用したという。多重定義の関数は,評価対象式から参照されて多重定
義解決で選ばれれば ,挙用したという。
参考
この規定は,名前での関数呼出し( #
),演算子多重定義( ),利用者定義の変換( ),位
置指定 < 式に対する割付け関数( # ) 及び 省略時でない初期化( # )を網羅する。コピーコンス
トラクタは,その呼出しが処理系によって行われても,挙用したことになる。
クラスの割付け関数 又は 解放関数は,評価対象式の中の < 式によっても挙用したことになる( # 及び # 参
。クラスの解放関数は,評価対象式の中の 3 式によっても挙用したことになる( ## 及び
照) # 参照)。クラ
スのコピー代入関数は,他のクラスに対して暗黙に定義されたコピー代入関数によっても挙用したことになる(
。クラスのコンストラクタの挙用は,
参照) # に規定する。クラスのデストラクタの挙用は, に規定する。
プログラムには,そのプログラムで挙用したすべてのインラインでない関数 及び すべてのオブジェクトに対して,
ちょうど 個の定義がなければならない。この定義は,そのプログラムの中に直接含まれていてもよいし ,標準ライ
,
ブラリ 又は 利用者定義のライブラリにあってもよいし ,暗黙に定義されたもの( 及び 参照)であっ
てもよい。インライン関数は,挙用した翻訳単位ごとにちょうど
個の定義がなければならない。
クラスは,そのクラス型が完全であることを要求する形で挙用した場合,その挙用している翻訳単位の中にちょう
ど 個の定義がなければならない。
例 次の翻訳単位は,5 の定義を含んでいないが,適格である。
5& '' 5 を構造型として宣言する。
5! L& '' 5 をポインタ様式で挙用する。
5! +& '' 5 をポインタ様式で挙用する。
参考 完全クラス型を要求する文脈については,宣言 及び 式に対する箇条で規定する。
次に示す場合には,クラス型 が完全であることを要求する。
― 型 のオブジェクトを定義する場合( 及び # 参照)
― 型 のオブジェクトを参照する左辺値に対して,左辺値から右辺値への変換を行う場合( 参照)
― ,#
式を型 に( 明示的にであれ暗黙にであれ )変換する場合( ,# ),# * 及び # 参照)
― ) ) 又は 静
! 以外の型をもち,空ポインタ定数でない式を,暗黙の変換( ),動的キャスト( #
的キャスト( # * )を用いて, へのポインタ型 又は への参照型に変換する場合
― # 参照)
型 の式にクラスメンバアクセス関数を適用する場合( #
― 型 の演算対象に 13 演算子( # ) 又は !J 演算子( # )を適用する場合

型 が返却値型 又は 実引数型である関数を定義する( 参照)場合 又は それを呼び出す場合( #
参照)
― 型 の左辺値を代入する場合( #) 参照)
),外部結合をもつインライン関数( )
クラス型( * ),列挙型( ) ),クラステンプレート( ),静的でない関
数テンプレート( ## ),クラステンプレートの静的なデータメンバ( # ),クラステンプレート( # )
のメンバ関数,及び 指定のないテンプレート仮引数をもったテンプレート特殊化( ) 及び# 参照)につい
ては,一つのプログラムの中に複数の定義があってもよい。ただし ,それぞれの定義が別々の翻訳単位にあり,しか
(ここで,複数の翻訳単位に定義がある実体の名前を と
も,次に示す要件をすべて満たしていなければならない。
する。)
― のそれぞれの定義は,字句の列として同じでなければならない。
― のそれぞれの定義の中で,名前検索( )の結果として互いに対応している名前は, の定義の中で
定義された特定の実体,又は 多重定義の解決( ) 及び 部分テンプレート特殊化( )の合致の

――――― [JIS X 3014 pdf 19] ―――――

                                                                                                   *
後での同一の実体を参照していなければならない。ただし ,名前が定値 ! オブジェクトを参照して
いて,内部結合 又は 結合なしである場合,そのオブジェクトが, のすべての定義において同じ汎整数
型 又は 列挙型であり,定数式( #* )によって初期化されていて,その値( 番地ではなく)を挙用して
いるだけであり,しかもその値が
のすべての定義において等しいならば,この限りでない。
― のそれぞれの定義の中で,参照されている多重定義の演算子,変換関数の暗黙の呼出し ,コンストラク
タ,1 < 関数,及び1 3 関数は,同じ関数 又は
の定義の中で定義された関数を参
照していなければならない。
― のそれぞれの定義の中で,関数の( 明示的にであれ暗黙にであれ )呼出しの省略時実引数は,その字句
列が の定義の中に現れたものとして扱う。すなわち,省略時実引数も,上に示した三つの要件を満たし
ていなければならない( 省略時実引数の部分式に省略時実引数が現れる場合には,それらに対しても再帰

的にこれらの要件を課す。)
― が暗黙に宣言されたコンストラクタ( )をもつクラスである場合,そのコンストラクタは,挙用し
ているそれぞれの翻訳単位で暗黙に定義されているものとして扱う。このそれぞれの翻訳単位での暗黙の
定義は,基底クラス 又は
のクラスメンバに対する同一のコンストラクタを呼び出さなければならない。
例 '' 翻訳単位 L3
5 Q
5 &
5 &
R&
5335 % . Q R
#3 5 Q R&
# +& '' # は, 5 を呼び出す。
'' 翻訳単位 +3
5 Q
5 &
5 &
R&
5335 % . % . Q R
#3 5 Q R&
'' # は, 5 を呼び出す。
'' # の暗黙の定義は,単一定義規則に反している。
がテンプレートであり,複数の翻訳単位に定義がある場合,上に示した最後の四つの要件は,テンプレートを囲む
有効範囲の中からそのテンプレート定義で挙用した名前,及び 具現化点での依存する名前に適用する。 がこれら
すべての要件を満たす場合,プログラムは, の定義が唯一つあるかのように振る舞う。要件を満たしていない場合,
その動作は,未定義とする。
宣言領域 及び 有効範囲 名前を導入する際にプログラム上で対象とする部分を,宣言領域 30
と呼ぶ。宣言領域は,その名前が正当03 である最大の範囲を構成する。ここで,名前が正当であるとは,その
名前を修飾なしで使ってその同じ実体が参照できることをいう。一般に,特定の名前は,必ずしも一連なりにはなっ
ていないプログラム上の部分でだけ正当となる。こうした部分を,有効範囲
!1 と呼ぶ。宣言の有効範囲を規定
するのに,宣言の潜在有効範囲1 !1 という概念を用いる。宣言の有効範囲は,その潜在有効範囲内に同
じ名前に対する宣言が他になければ ,潜在有効範囲に等しい。他の宣言がある場合,外側の( 包含している)宣言領
域にある宣言の有効範囲は,内側の( 包含される)宣言領域にある宣言の潜在有効範囲を除いたものとなる。

% +M&
Q
% &
% M+&
R
識別子 は, 箇所で宣言して( さらに, 箇所で挙用して )いる。最初の の宣言領域は,この例全体
となる。最初の の潜在有効範囲は,最初の の直後から始まり,このプログラムの終わりまで続く。し
注 省略時実引数の名前検索については, で規定する。

――――― [JIS X 3014 pdf 20] ―――――

次のページ PDF 21

JIS X 3014:2003の引用国際規格 ISO 一覧

  • ISO/IEC 14882:2003(IDT)

JIS X 3014:2003の国際規格 ICS 分類一覧

JIS X 3014:2003の関連規格と引用規格一覧

規格番号
規格名称
JISX0001:1994
情報処理用語―基本用語
JISX0002:1987
情報処理用語(算術演算及び論理演算)
JISX0003:1989
情報処理用語(装置技術)
JISX0004:2002
情報処理用語(データの構成)
JISX0005:2002
情報処理用語(データの表現)
JISX0006:1989
情報処理用語(データの準備及び取扱い)
JISX0007:2001
情報処理用語―プログラミング
JISX0008:2001
情報処理用語―セキュリティ
JISX0009:1997
情報処理用語(データ通信)
JISX0010:1987
情報処理用語(操作技法及び機能)
JISX0011:1989
情報処理用語(処理装置)
JISX0012:1990
情報処理用語(データ媒体,記憶装置及び関連装置)
JISX0013:1998
情報処理用語(図形処理)
JISX0014:1999
情報処理用語―信頼性,保守性及び可用性
JISX0015:2002
情報処理用語(プログラム言語)
JISX0016:1997
情報処理用語(情報理論)
JISX0017:1997
情報処理用語(データベース)
JISX0018:1989
情報処理用語(分散データ処理)
JISX0019:1994
情報処理用語―アナログ計算
JISX0020:1992
情報処理用語(システム開発)
JISX0021:1987
情報処理用語(プロセスインタフェース)
JISX0022:1989
情報処理用語(計算器)
JISX0023:1995
情報処理用語(テキスト処理)
JISX0024:1998
情報処理用語(計算機統合生産)
JISX0025:1994
情報処理用語―ローカルエリアネットワーク
JISX0026:1995
情報処理用語(開放型システム間相互接続)
JISX0027:1995
情報処理用語(オフィスオートメーション)
JISX0028:1999
情報処理用語―人工知能―基本概念及びエキスパートシステム
JISX0031:1999
情報処理用語―人工知能―機械学習
JISX0032:1999
情報処理用語―電子メール