外部宣言と外部定義
宣言構文:インデックス への移動
記憶クラス指定子 auto および register は、外部宣言では使用できません。内部リンケージを持つように宣言されたトランスレーション ユニット内の各識別子に対して、外部定義は 1 つしか指定できません。
外部定義は、オブジェクトや関数も定義する外部宣言です。つまり、記憶域も割り当てます。 外部リンケージを持つように宣言された識別子が、式の中で使用される場合(sizeof オペランドの一部として使用される場合以外)、その識別子の外部定義は、プログラム全体でただ 1 つでなければなりません。
C++ コンパイラでは、配列、構造体、共用体などの外部名を後から宣言して、以前の宣言に情報を追加できます。 以下はその例です:
int a[]; // サイズがない struct mystruct; // タグのみ、メンバー宣言子がない . . . int a[3] = {1, 2, 3}; // サイズを指定して初期化 struct mystruct { int i, j; }; // メンバー宣言子を追加
次にクラス宣言構文を示します。 クラスに関するセクション(class で始まるセクション)に、クラスの宣言例があります。 「左辺値リファレンス」で、(ポインタ型と密接な関係がある)C++ の参照型について詳細を説明しています。 なお、template 型クラスについては、「テンプレートの使い方」を参照してください。
C++Builder クラス宣言構文(C++ のみ)
class-specifier: class-head { <member-list> } class-head: class-key <identifier> <base-specifier> class-key class-name <base-specifier> member-list: member-declaration <member-list> access-specifier : <member-list> member-declaration: <decl-specifiers> <member-declarator-list>; function-definition <;> qualified-name ; member-declarator-list: member-declarator member-declarator-list, member-declarator member-declarator: declarator <pure-specifier> <identifier> : constant-expression pure-specifier: = 0 member-initializer-list: member-initializer member-initializer , member-initializer-list member-initializer: class-name ( <argument-list> ) identifier ( <argument-list> ) operator-function-name: operator operator-name base-specifier: : base-list class-name virtual <access-specifier> class-name access-specifier <virtual> class-name base-list: base-specifier base-list , base-specifier access-specifier: Private Protected Public conversion-function-name: operator conversion-type-name conversion-type-name: type-specifiers <pointer-operator> constructor-initializer: :member-initializer-list operator-name: one of new delete sizeof typeid + - * / % ^ & | ~ ! = <> += -= =* /= %= ^= &= |= << >> >>= <<= == != <= >= && || ++ __ , ->* -> () [ ] .*