Standardargument-Ausdrücke
Die Ausdrücke, die für standardmäßige Argumente verwendet werden, sind häufig konstante Ausdrücke, dies ist jedoch nicht erforderlich.Der Ausdruck kann Funktionen kombinieren, die im aktuellen Gültigkeitsbereich, in den konstanten Ausdrücken und mit den angegebenen globalen Variablen sichtbar sind.Der Ausdruck darf nicht statischen Variablen oder lokale Variablen Klassenmember nicht enthalten.Der folgende Code veranschaulicht dies:
BOOL CreateVScrollBar( HWND hWnd, short nWidth =
GetSystemMetrics( SM_CXVSCROLL ) );
Die vorangehende Deklaration gibt eine Funktion, die eine vertikale Bildlaufleiste einer angegebenen Breite für ein Fenster erstellt.Wird kein Argument angegeben wird, wird die Breite der Windows-API-Funktion, GetSystemMetrics, das aufgerufen wird, um die Standardbreite für eine Bildlaufleiste suchen.
Standardmäßig wird nach dem Funktionsaufruf Ausdruck ausgewertet, aber die Auswertung abgeschlossen ist, bevor der Funktionsaufruf tatsächlich ausgeführt wird.
Da formale Argumente an eine Funktion im Gültigkeitsbereich der Funktion sind, und da die Auswertung von Standardargumenten vor Eintritt in diesem Bereich stattfindet, können Sie formale Argumente oder lokale Variablen in den Argumentausdrücken nicht verwenden.
Beachten Sie, dass jedes deklarierten formalen Argument einen Ausdruck vor einem Standardargument Namen im globalen Gültigkeitsbereich der Funktion ausgeblendet werden kann, die Fehler verursachen kann.Der folgende Code ist ungültig:
const int Categories = 9;
void EnumCategories( char *Categories[], int n = Categories );
Im vorherigen Code ist der globale Name Categories am Gültigkeitsbereich der Funktion ausgeblendet und macht den Standardargument Ausdruck ungültig.