関数宣言の構文
関数はクラスまたは構造体のグローバルまたはメンバーである場合があります。は次の手順を使用して宣言されています :
[friend] [storage-class-specifier] [function-specifier]
[[cv-qualifer] type-specifier] declarator [cv-qualifer]
[exception-spec]
[friend] [storage-class-specifier] [function-specifier]
[[cv-qualifer] type-specifier] [*|&] [ms-modifer] identifier
( argument-list ) [cv-qualifer] [exception-spec]
宣言で指定されています。指定子 を参照してください。
クラスにはfriend のオプション指定子。
省略可能なストレージ クラスの指定子。グローバル関数の場合有効なストレージ クラスの指定子は 静的 と extern です。クラスのメンバー関数では 外部 は使用できません。
オプションの関数の指定子。グローバル関数では唯一の有効な関数の指定子は インライン。。クラスのメンバー関数では 仮想 と インライン はコンストラクターには 明示 許可されます。
戻り値の型を示す型指定子 (使用してポインターまたは参照型への変更に応答する ( または)。
宣言子。
省略可能なポインターまたは戻り値の型を変更するオペレータ参照
呼び出し規約を指定する Microsoft のオプションの特定の修飾子。Microsoft の修飾子を 参照してください。
関数の名前。関数がクラスまたは構造体のメンバーである場合名前はスコープ解決演算子を使用して修飾される場合があります。
の宣言で囲んだ引数リストをかっこで ()。
オプションの const または volatile 修飾子。ここでは 定数 使用するにはクラス メンバーのみが関数がクラスのデータ メンバーを変更できないことを示すために使用されます。
戻り値の型が関数ポインターである場合宣言の構文は後で説明するように複雑になる場合があります。
- オプションの例外のどの関数が例外をスローすること。例外の指定 を参照してください。
型は識別子の宣言は次のように構築されている可能性があります : (指定されている場合)const または volatile関数宣言の指定子で示される型を返す指定された引数リストを指定します。
次の例では2 種類の単純な関数宣言を示します。:
char *strchr( char *dest, char *src );
static int atoi( const char *ascnum ) const;
関数へのポインターを返す関数の宣言
関数ポインターの型を返す関数を宣言する場合は関数ポインターの型のエイリアスを宣言するために typedef を使用することをお勧めします。次に例を示します。
typedef int (*fp)(int);
fp myFunction(char* s); // function returning function pointer
これを行う関数宣言の正しい構文は関数ポインターの宣言の構文で関数名引数リストと識別子 (上の例の fp) を置き換えることによって次のように推論される場合があります :
int (*myFunction(char* s))(int);
上のように宣言は上記の型定義を使用して宣言と等価です。