宣言
宣言は、プログラム内で使用する新しい名前を定義します。 このセクションには、宣言の次の使い方に関するトピックが含まれています。
inline または virtual として関数を宣言します。
名前を定数に関連付けます (列挙宣言)。
新しい型 (class、struct、または union 宣言) を宣言します。
型 (型定義宣言) のシノニムを指定します。
名前空間を指定します。
エイリアスにより、シノニムとして使用する型を宣言します。
新しい名前を定義することに加えて、宣言は、識別子がコンパイラによってどのように解釈されるかを指定します。 宣言は、識別子に関連付けられたストレージを自動的に予約しません。 定義によってストレージが予約されます。
注意
ほとんどの宣言は定義でもあります。定義ではない宣言には、メンバー リストなしのクラス宣言、および関数本体を持たない関数宣言などがあります。
宣言は次のいずれかです。
[ decl-specifiers ] [ declarator-list ] ;
function-definition
linkage-specification
template-specification
alias templates
explicit-template-instantiation
explicit-template-specialization
namespace-definition
namespace-alias-definition
alias-declaration
using-declaration
using-directive
asm-definition
宣言の decl-specifiers コンポーネントはオプションとして示されますが、クラス型または列挙型の宣言内でのみ省略できます。
declarator-list コンポーネント内の宣言子には、宣言されている名前が含まれます。 declarator-list はオプションとして表示されますが、省略できるのは関数宣言または関数定義だけです。
注意
関数の宣言は、一般に、プロトタイプと呼ばれます。プロトタイプは、引数や関数の戻り値の型に関する型情報を提供します。また、プロトタイプによりコンパイラは正しい変換を実行でき、タイプ セーフがサポートされます。
名前は宣言子の直後、ただし初期化子 (省略可能) よりも前の位置で宣言されるものと見なされます 詳細については、「Point of Declaration (宣言のポイント)」を参照してください。
宣言は、スコープ内で行われます。 スコープは、宣言された名前の可視性と定義されたオブジェクトの継続時間 (存在する場合) を制御します。 スコープ規則と宣言の使用方法の詳細については、「スコープ」を参照してください。
オブジェクト宣言は、「ストレージ クラス指定子」で説明する extern ストレージ クラス指定子が含まれていない限り定義でもあります。 関数宣言は、プロトタイプでない限り定義でもあります。 プロトタイプは定義する関数本体がない関数ヘッダーです。 オブジェクトの定義により、そのオブジェクトのストレージの割り当てと適切な初期化が行われます。
関連トピック
function-definition の詳細については、「C++ 関数定義」を参照してください。
linkage-specification の詳細については、「リンケージの仕様]を参照してください。
template-specification、explicit-template-instantiation、および explicit-template-specialization の詳細については、「テンプレート」を参照してください。
namespace-definition および namespace-alias-definition の詳細については、「名前空間 (C++)」を参照してください。
asm-definition の詳細については、「__asm」を参照してください。