No escopo do arquivo, não há diferença em C ++. const
torna o vínculo interno o padrão e todas as variáveis globais têm vida útil estática. Mas a primeira variante tem o mesmo comportamento em C, portanto, esse pode ser um bom motivo para usá-lo.
Dentro de uma função, a segunda versão pode ser calculada a partir de parâmetros. Em C ou C ++, não precisa ser uma constante em tempo de compilação, como algumas outras linguagens exigem.
Dentro de uma classe, basicamente a mesma coisa que para funções. Um const
valor de instância pode ser calculado na lista de inicializadores do ctor . A static const
é definido durante a inicialização e permanece inalterado pelo restante do programa. (Nota: o código para static
membros parece um pouco diferente porque a declaração e a inicialização são separadas.)
Lembre-se, em C ++, const
significa somente leitura , não constante . Se você tem um ponteiro para const
, outras partes do programa podem alterar o valor enquanto você não está procurando. Se a variável foi definida com const
, ninguém poderá alterá-la após a inicialização, mas a inicialização ainda pode ser arbitrariamente complexa.
static
é provavelmente a palavra-chave mais sobrecarregada em C ++. O significado do seu código varia amplamente, dependendo se está no escopo do espaço para nome, no escopo da classe ou no escopo da função. Você pode esclarecer isso.