Compartir a través de


Expresiones predeterminadas de argumento

Las expresiones utilizadas para los argumentos predeterminados son a menudo expresiones constantes, pero no es un requisito.La expresión puede combinar las funciones que están visibles en el ámbito, las expresiones constantes, y las variables globales actuales.La expresión no puede contener variables o variables no estáticas de miembro de clase.El código siguiente se muestra esto:

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

La declaración anterior especifica una función que crea una barra de desplazamiento vertical de un ancho especificado para una ventana.Si no se proporciona ningún argumento de ancho, la función de la API de Windows, GetSystemMetrics, se llama para encontrar el ancho predeterminado para una barra de desplazamiento.

La expresión predeterminada se evalúa después de la llamada de función, pero se completa la evaluación antes de que tenga lugar la llamada de función realmente.

Dado que los argumentos formales a una función están en el ámbito de la función y, dado que la evaluación de argumentos predeterminados tiene lugar antes de entrada en este ámbito, no puede utilizar argumentos formales, o variables locales en expresiones predeterminadas del argumento.

Tenga en cuenta que cualquier argumento formal declarado antes de que una expresión predeterminada de argumento puede ocultar un nombre global en el ámbito de la función, que puede producir errores.El siguiente código no es válido:

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

En el código anterior, el nombre global Categories se oculta en el ámbito de la función, crear la expresión predeterminada de argumento no válida.

Vea también

Referencia

Argumentos predeterminados