複数の関数宣言

C++1 つの特定の関数に対する複数の関数宣言はすべて、 パラメーターの数と型が同じでなければなりません。また、戻りの型も同じでなければなりません。

これらの戻りの型およびパラメーターの型は、関数型の一部ですが、 デフォルトの引き数と例外指定は、関数型の一部ではありません。

すでになされたオブジェクトまたは関数の宣言が、囲みスコープで可視になっている場合は、 ID には、最初の宣言と同じリンケージが指定されています。ただし、リンケージを持たずに、後でリンケージ指定子を使用して宣言される変数または関数は、 ユーザーが指定したリンケージを持ちます。

引き数のマッチングの観点では、省略符号とリンケージ・キーワードは、関数型の一部と見なされます。 これらは、関数のすべての宣言において、矛盾しないように使用する必要があります。 2 つの宣言におけるパラメーター型で、typedef 名または未指定の引き数配列境界の使用だけが相違している場合、その宣言は同じです。 const または volatile の型指定子も関数型の一部ですが、 宣言の一部、あるいは非静的メンバー関数の定義の一部でしかありません。

2 つの関数宣言が戻りの型とパラメーター・リストの両方で一致する場合、2 番目の宣言が最初の宣言の再宣言として処理されます。 次の例は、同じ関数を宣言します。

int foo(const string &bar);
int foo(const string &);

戻りの型が違うだけの 2 つの関数を宣言することは、無効な関数の多重定義となり、 コンパイル時のエラーのフラグが付けられます。次に例を示します。

void f();
int f();      // error, two definitions differ only in
              // return type
int g()
{
   return f();
}

関連参照

IBM Copyright 2003