C++ 関数におけるデフォルト引き数

C++関数仮パラメーターに対してデフォルト値を与えることができます。 次に例を示します。

#include <iostream>
using namespace std;
 
int a = 1;
int f(int a) { return a; }
int g(int x = f(a)) { return x; }
 
int h() {
  a = 2;
  {
    int a = 3;
    return g();
  }
}
 
int main() {
  cout << h() << endl;
}

この例では、標準出力に 2 を印刷します。その理由は、 g() の宣言で参照される a は、ファイル・スコープのもので、 この値は、g() が呼び出されるときは 2 です。

デフォルト引き数は、暗黙的に、パラメーター型に変換可能でなければなりません。

関数へのポインターは、その関数と同じ型でなければなりません。 関数の型を指定せずに参照によって関数のアドレスを得ようとすると、エラーになります。 関数の型は、デフォルト値を持つ引き数によって影響を受けません。

以下の例は、デフォルト引き数が、関数の型の一部とは見なされていないことを示しています。 デフォルト引き数を使用すると、すべての引き数を指定しなくても関数を呼び出すことができます。 すべての引き数の型を指定しない関数へのポインターを作成することはできません。 関数 f は、明示的引き数がなくても呼び出すことができますが、ポインター badpointer は、引き数の型を指定しないと定義することができません。

int f(int = 0);
void g()
{
   int a = f(1);                // ok
   int b = f();                 // ok, default argument used
}
int (*pointer)(int) = &f;       // ok, type of f() specified (int)
int (*badpointer)() = &f;       // error, badpointer and f have
                                // different types. badpointer must
                                // be initialized with a pointer to
                                // a function taking no arguments.

関連参照

IBM Copyright 2003