Compartilhar via


Expressões de argumento padrão

As expressões usadas para os argumentos padrão geralmente são expressões constantes, mas esse não é um requisito.A expressão pode combinar funções que são visíveis no escopo atual, expressões constantes e variáveis globais.A expressão não pode conter variáveis locais ou variáveis de membro de classe non-static.O código a seguir ilustra isso:

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

Declaração precedente Especifica uma função que cria uma barra de rolagem vertical de uma determinada largura para uma janela.Não se for fornecido nenhum argumento de largura, a função de API do Windows, GetSystemMetrics, é chamado para encontrar a largura padrão de uma barra de rolagem.

A expressão de padrão é avaliada após a chamada de função, mas a avaliação é concluída antes da chamada de função realmente ocorre.

Como argumentos formais para uma função estão no escopo de função, e a avaliação de argumentos padrão ocorre antes a entrada para este escopo, você não pode usar argumentos formais ou variáveis locais em expressões de argumento padrão.

Observe que o argumento formal declaradas antes de uma expressão de argumento padrão pode ocultar um nome global no escopo de função, que pode causar erros.O código a seguir é ilegal:

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

No código anterior, o nome global Categories estiver oculta no escopo de função, tornando a expressão de argumento padrão inválido.

Consulte também

Referência

Argumentos padrão