Häufig stellt sich die Frage, wie man eine Funktion ``erweitern'' kann, ohne die Funktionalität eines bestehenden Programms, das diese Funktion verwendet, zu verändern, oder wie man eine Funktion, die zur vollständigen Charakterisierung mehrere Argumente benötigt, einfach bedienbar gestalten kann. Diese Aufgaben können mit Defaultargumenten gelöst werden. Beispielsweise könnte eine Funktion zum Löschen eines Feldes so aussehen:
void clear(int size, int *array){
for (int i=0; i < size; i++ )
array[i] = 0;
}
Diese läß sich später leicht zu einer Funktion erweitern, die
das Feld mit einem beliebigen Wert füllt:
void clear(int size, int *array, int value=0){
for (int i=0; i < size; i++ )
array[i] = value;
}
Ein Defaultargument muß einen konstanten Wert besitzen, der zur
Compilezeit feststeht und eindeutig ist. Das bedeutet, daß dieser in
jeder Übersetzungseinheit nur einmal spezifiziert werden darf.
Wenn sichergestellt ist (z.B. mit include guards im header-file), daß
der Compiler nur eine Deklaration der Funktion sieht, dann ist der beste
Platz, um den Defaultwert festzulegen, in einer Funktionsdeklaration in
einem header-file. Ansonsten sollte dieser Wert bei der Definition der
Funktion festgelegt werden.