次の方法で共有


既定の引数の式

既定の引数に使用する式は、多くの場合、定数式ですが、定数式である必要はありません。 この式では、現在のスコープ、定数式、グローバル変数で参照可能な関数を組み合わせることができます。 この式に、ローカル変数または非静的クラス メンバー変数を含めることはできません。 次に例を示します。

BOOL CreateVScrollBar( HWND hWnd, short nWidth =
GetSystemMetrics( SM_CXVSCROLL ) );

上記の宣言は、ウィンドウに特定の幅の垂直スクロール バーを作成する関数を指定します。 幅の引数が指定されていない場合、Windows API 関数の GetSystemMetrics が呼び出されてスクロール バーの既定の幅が検索されます。

既定の式は、関数呼び出しの後で評価されますが、評価は関数呼び出しが実際に発生する前に完了します。

関数への仮引数は関数スコープ内にあり、既定の引数の評価はこのスコープの開始前に行われるため、既定の引数の式では仮引数またはローカル変数を使用できません。

既定の引数式の前に宣言されている仮引数によって関数スコープ内でグローバル名が隠される場合があり、これがエラーの原因となることに注意してください。 次のコードは正しくありません。

const int Categories = 9;
void EnumCategories( char *Categories[], int n = Categories );

このコードでは、グローバル名 Categories が関数スコープで隠されるため、既定の引数式は無効になります。

参照

関連項目

既定の引数