Folgende Beispiele sind legal:
int f( char *s, int i = 0 ); int g( char *s, int i = 0, int j = 12 ); int h( char *s = "" ); int i( char * = "" ); // Bei Deklaration kein Name nötig ... f( "abc" ); // i ist 0. f( "abc", 12 ); // i ist 12. g( "abc" ); // i ist 0, j ist 12. g( "abc", 2 ); // i ist 2, j ist 12. g( "abc", 2, 30 ); // i ist 2, j ist 30.
Nicht zulässig sind dagegen folgende Beispiele:
int f( int i = 0, int j ); // falsch:
// Default-Parameter müssen von hinten
// her lückenlos sein!
int g( int i = 0, ... ); // falsch:
// Default-Parameter und variable
// Parameterlisten vertragen sich nicht!
int i( char *= "" ); // falsch:
// *= ist ein Token, deshalb Syntaxfehler!
// Hier muß also ein Leerzeichen eingefügt
// werden ("*=" -> "* =").
Hier ein vollständiges Beispiel:
// Time-stamp: "(15.11.01 16:10) defargch.cpp [Klaus Wachtler (aw38)]"
//
// demonstriert default-Argumente.
#include <iostream>
using namespace std;
void h ( const char *s = "abc" )
{
cout << s << endl;
}
int main( int nargs, char *args[] )
{
h(); // gibt "abc" aus
h( "efg" ); // gibt "efg" aus
return 0;
}
... und die zugehörige Ausgabe:
abc efg