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