以下の関数宣言は、同じスコープ内にあっても、それらを多重定義することはできません。
このリストは、明示的に宣言された関数および using
宣言によって導入された関数にのみ適用されることに注意してください。
int f(); float f();
struct A { static int f(); int f(); };
typedef int I; void f(float, int); void f(float, I);
f(char*); f(char[10]);
パラメーターを差別化するときに、最初の配列次元が無意味で、他のすべての配列次元が有効であるもの。 例えば、次の宣言は、同じ関数の宣言です。
g(char(*)[20]); g(char[5][20]);
次の 2 つの宣言は、等価ではありません。
g(char(*)[20]); g(char(*)[40]);
void f(int(float)); void f(int (*)(float));
int f(int); int f(const int); int f(volatile int);
const、volatile、および restrict の各修飾子を パラメーターの型指定内で 適用する場合には、 これらの修飾子を使い分けてパラメーターを区別できるという点に注目してください。 例えば、以下の宣言は、const および volatile が * では なく int を修飾しており、パラメーターの型指定の最外部レベルにはないため 、等価ではありません。
void g(int*); void g(const int*); void g(volatile int*);
次の宣言も等価ではありません。
void g(float&); void g(const float&); void g(volatile float&);
void f(int); void f(int i = 10);
関連参照