既定の引数の式
既定の引数に使用する式は定数式ですがこれは必須ではありません。式は現在のスコープ定数式とグローバル変数に表示される関数を組み合わせることができます。式はローカル変数または非静的クラス メンバー変数を含めることはできません。次のコードはこれを示したものです :
BOOL CreateVScrollBar( HWND hWnd, short nWidth =
GetSystemMetrics( SM_CXVSCROLL ) );
上のように宣言はウィンドウの特定の幅に垂直スクロール バーを作成する関数を指定します。幅の引数がない場合はスクロール バーの既定の幅を検索するにはWindows API 関数GetSystemMetrics で呼び出されます。
既定式は関数呼び出しの後で評価されますが関数呼び出しが実際に行われる前に評価が完了します。
関数の仮引数が関数内にあるため既定の引数の評価がこのスコープの開始前に行われるため既定の引数式で仮引数またはローカル変数を使用できません。
既定の引数の式はエラーを発生させることができる関数内のグローバル名前を非表示にできるようにすることで宣言されている仮引数注意してください。次のコードは無効です :
const int Categories = 9;
void EnumCategories( char *Categories[], int n = Categories );
このコードではグローバル名前 Categories は既定の引数式を無効にする関数スコープで非表示になります。