Compartir a través de


Expresiones de argumento predeterminado

Las expresiones usadas para los argumentos predeterminados suelen ser expresiones constantes, pero no es un requisito obligatorio. 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 locales ni variables de miembro de clase no estáticas. Esto se ilustra en el código siguiente:

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, se llama a la función de la API de Windows, GetSystemMetrics, para encontrar el ancho predeterminado de una barra de desplazamiento.

La expresión predeterminada se evalúa después de la llamada a la función, pero la evaluación se realiza en realidad antes de que se produzca la llamada a la función.

Como los argumentos formales de una función están en el ámbito de la función, y puesto que la evaluación de los argumentos predeterminados tiene lugar antes de que se acceda a este ámbito, no es posible utilizar argumentos formales ni variables locales en expresiones con argumentos predeterminados.

Tenga en cuenta que cualquier argumento formal declarado antes de una expresión con argumentos predeterminados puede ocultar un nombre global en el ámbito de la función, lo 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 está oculto en el ámbito de la función, lo que invalida la expresión con argumentos predeterminados.

Vea también

Referencia

Argumentos predeterminados