Especificadores de classe de armazenamento estático
Os especificadores de armazenamento de classe estáticos, static e extern, podem ser aplicados a objetos e funções. A tabela a seguir mostra onde as palavras-chave static e extern podem e não podem ser usadas.
Uso de static e de extern
Construtor |
static pode ser usado? |
extern pode ser usado? |
---|---|---|
Declarações de função dentro de um bloco |
Não |
Sim |
Argumentos formais para uma função |
Não |
Não |
Objetos em um bloco |
Sim |
Sim |
Objetos fora de um bloco |
Sim |
Sim |
Funções |
Sim |
Sim |
Funções de membro de classe |
Sim |
Não |
Dados de membro de classe |
Sim |
Não |
Nomes typedef |
Não |
Não |
Um nome especificado usando a palavra-chave static tem vinculação interna, exceto para os membros estáticos de uma classe que têm vinculação externa. Isto é, não é visível fora da unidade de conversão atual. Um nome especificado usando a palavra-chave extern tem vinculação externa a menos que previamente definido como tendo vinculação interna. Para obter mais informações sobre visibilidade de nomes, consulte Escopo e Programa e vinculação.
Dica
As funções que são declaradas como inline e que não são funções de membro de classe recebem as mesmas características de vinculação que as funções declaradas como static.
Um nome de classe cuja declaração ainda não foi encontrada pelo compilador pode ser usado em uma declaração extern. O nome introduzido por essa declaração não pode ser usado até que a declaração de classe seja encontrado.