演算子の中で、多重定義時にデフォルト引き数を持つことができるのは、 関数呼び出し演算子と演算子 new だけです。
デフォルト引き数を持つパラメーターは、 関数宣言パラメーター・リスト内の末尾のパラメーターでなければなりません。 次に例を示します。
void f(int a, int b = 2, int c = 3); // trailing defaults void g(int a = 1, int b = 2, int c); // error, leading defaults void h(int a, int b = 3, int c); // error, default in middle
いったん宣言または定義でデフォルト引き数を指定すると、その引き数を、同じ値にする場合であっても、再定義することはできません。 ただし、それまでの宣言で指定されていないデフォルト引き数を追加することはできます。 例えば、次の例の最後の宣言では、a および b に対するデフォルト値を 再定義しようとしています。
void f(int a, int b, int c=1); // valid void f(int a, int b=1, int c); // valid, add another default void f(int a=1, int b, int c); // valid, add another default void f(int a=1, int b=1, int c=1); // error, redefined defaults
関数宣言または定義では、いかなるデフォルト引き数値でも与えることができます。 デフォルト引き数値に続くパラメーター・リストの中のパラメーターはすべて、 関数の、この宣言または前の宣言に指定されたデフォルト引き数値を持っていなければなりません。
デフォルト引き数の式では、ローカル変数を使用することはできません。 例えば、コンパイラーは、次の g() および h() の両方の関数に対してエラーを生成します。
void f(int a) { int b=4; void g(int c=a); // Local variable "a" cannot be used here void h(int d=b); // Local variable "b" cannot be used here }
関連参照