デフォルト引数の制約事項 (C++ のみ)

演算子の中で、多重定義時にデフォルト引数を持つことができるのは、関数呼び出し演 算子と演算子 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
}