C++ 関数定義

関数定義は、関数本体 (関数を構成するコード) を指定するという点で関数宣言と異なります。 関数定義の形式は次のとおりです。

decl-specifiers declarator [cv-qualifers] [exception-specification]
{
   // function body
}
decl-specifiers declarator [cv-qualifers] =default;

decl-specifiers declarator [cv-qualifers] =delete;

定義の部分は以下のとおりです。

  • 宣言指定子 (「関数の宣言」を参照)。

  • 宣言子 (この記事で後で説明)。

  • const または volatile 修飾子 (省略可能)。 このコンテキストでは、const は、クラス メンバーにのみ使用することができ、関数がクラスのデータ メンバーを変更しないことを示します。

  • 関数がスローする例外の指定。 「例外の仕様」を参照してください。

  • 中かっこ {} で囲まれたステートメントで構成される関数本体。

  • =default; は、明示的既定化の定義の場合に使用します。

  • =delete; は、削除指定の定義の場合に使用します。

宣言子の形式は次のとおりです。

  • 戻り値の型を変更するポインターまたは参照演算子 (省略可能)。

  • オプションの Microsoft 固有の修飾子。 「Microsoft 固有の修飾子」を参照してください。

  • 関数の名前。 関数がクラスまたは構造体のメンバーである場合、名前はスコープ解決演算子を使用して修飾されている場合があります。

  • 引数の宣言のリストをかっこ () で囲まれた引数宣言リスト。

  • コンストラクターの場合、コンストラクターの初期化子 (省略可能。この記事で後で説明)。

その場合の宣言子の形式については、関数ポインターを返す関数の「関数の宣言」にあるコメントを参照してください。

引数の宣言の一覧で宣言された仮引数は、関数本体のスコープ内にあります。

次の図では、関数定義の一部を示しています。 網かけされた部分は関数本体です。

関数定義部分

関数定義部分

構文のコンストラクター初期化子要素は、コンストラクター内でのみ使用されます。 この目的は、基底クラス、および含まれるオブジェクトの初期化を許可することです。 コンストラクターの初期化子の使用の詳細については、「基本クラスとメンバーの初期化」を参照してください。

明示的に既定化された定義を宣言できるのは、特殊なメンバー関数についてのみです。 特殊なメンバー関数を明示的に既定化すると、実装によってその特殊なメンバー関数が暗黙的な定義と同様に定義されます。ただし、暗黙的に宣言された特殊なメンバー関数は常にインラインですが、明示的に既定にした場合は、インラインでない可能性があります。 既定化関数の詳細については、「C++11 の機能 (Modern C++) のサポート」の「既定化および削除指定関数」を参照してください。

削除指定の定義 (削除指定関数とも呼ばれる) も暗黙的にインラインです。 削除指定関数を、宣言以外の目的で明示的または暗黙的に参照するプログラムは、形式的に適切ではありません。 削除指定関数の詳細については、「C++11 の機能 (Modern C++) のサポート」の「既定化および削除指定関数」を参照してください。

参照

関連項目

宣言子

概念

関数の引数依存名の参照 (Koenig 参照)