預設引數運算式
使用預設引數的運算式通常是常數運算式,但這並非必要。 運算式可以結合會顯示在目前的範圍、 常數運算式和全域變數的函式。 運算式不能包含區域變數或非靜態類別成員變數。 下列程式碼可說明這點:
BOOL CreateVScrollBar( HWND hWnd, short nWidth =
GetSystemMetrics( SM_CXVSCROLL ) );
上述的宣告中指定的函式,會建立指定的寬度為視窗的垂直捲軸。 如果沒有寬度提供引數,Windows API 函式中, GetSystemMetrics,稱為 「 找不到捲軸上的預設寬度。
在函式呼叫之後,會評估預設運算式,但這個函式呼叫實際發生之前完成評估。
由於型式的引數的函式是在函式範圍內,而且預設引數的評估先進行項目加入這個領域,您無法使用預設引數運算式中的型式的引數或區域變數。
請注意任何型式的引數宣告之前的預設引數運算式可以隱藏在函式範圍中,可能會造成錯誤的通用名稱。 下列程式碼是不合法的:
const int Categories = 9;
void EnumCategories( char *Categories[], int n = Categories );
在上述程式碼中,全域名稱Categories隱藏在函式的範圍,讓預設引數的運算式無效。