classe de armazenamento C ++
classe de armazenamento define um C ++ variáveis de programa / intervalo de função (visibilidade) e ciclo de vida. Estes especificadores colocado antes de modificar o tipo. Listados abaixo estão os programas de armazenamento de classe C ++ estão disponíveis:
- automático
- registrar
- estático
- extern
- mutável
classe de armazenamento auto
classe de armazenamentoauto é todos os tipos variáveis de armazenamento padrão local.
{ int mount; auto int month; }
O exemplo acima define duas variáveis com o mesmo classe de armazenamento, auto só pode ser usado dentro de uma função, ou seja, auto somente modifica a variável local.
registar classe de armazenamento
registar classe de armazenamento é usado para definir armazenados nos registos em vez de RAM nas variáveis locais.Isto significa que o tamanho máximo da variável é igual ao tamanho do registo (geralmente uma palavra), e não pode ser aplicado ao mesmo operador unária '&' (porque não tem nenhum local de memória).
{ register int miles; }
apenas de se registar para acesso rápido às variáveis, tais como contador. Deve também notar-se que a definição de "registo" não significa que a variável será armazenada num registo, isso significa que a variável pode ser armazenado num registo, dependendo das limitações do hardware e implementação.
classe de armazenamento estática
classe de armazenamentoestática instrui o compilador para manter a existência de variáveis locais no ciclo de vida do programa, sem a necessidade de inseri-lo cada vez que você vá fora do escopo e ser criados e destruídos.Portanto, a utilização de variáveis locais estáticos pode ser modificado para manter o valor das variáveis locais entre chamadas de função.
modificador estático pode ser aplicada para variáveis globais. Quando a variável estática global modificada, a variável irá limitar o escopo da instrução em seus arquivos.
Em C ++, quando usado em membros de dados de classe estáticos, todos os objetos resultará em apenas uma cópia da classe membros são compartilhados.
#include <iostream> // 函数声明 void func(void); static int count = 10; /* 全局变量 */ int main() { while(count--) { func(); } return 0; } // 函数定义 void func( void ) { static int i = 5; // 局部静态变量 i++; std::cout << "变量 i 为 " << i ; std::cout << " , 变量 count 为 " << count << std::endl; }
Quando o código acima é compilado e executado, ele produz os seguintes resultados:
变量 i 为 6 , 变量 count 为 9 变量 i 为 7 , 变量 count 为 8 变量 i 为 8 , 变量 count 为 7 变量 i 为 9 , 变量 count 为 6 变量 i 为 10 , 变量 count 为 5 变量 i 为 11 , 变量 count 为 4 变量 i 为 12 , 变量 count 为 3 变量 i 为 13 , 变量 count 为 2 变量 i 为 14 , 变量 count 为 1 变量 i 为 15 , 变量 count 为 0
classe de armazenamento externo
classe de armazenamentoexterno é usado para fornecer uma referência a uma variável global, a variável global para todos os arquivos de programa são visíveis.Quando você usa 'externo', que não pode inicializar uma variável, o nome da variável irá apontar para um local de armazenamento previamente definido.
Quando você tem vários documentos e definir uma variável global ou função que pode ser usado em outros documentos, você pode usarexternem outros arquivos para obter uma referência variável ou função definida. Pode serentendido,extern é usado para declarar uma variável global ou função em outro arquivo.
modificador externo é normalmente utilizado quando existem dois ou mais arquivos compartilhar as mesmas funções ou variáveis globais de tempo, como se segue:
Primeiro arquivo: main.cpp
#include <iostream> int count ; extern void write_extern(); int main() { count = 5; write_extern(); }
O segundo arquivo: support.cpp
#include <iostream> extern int count; void write_extern(void) { std::cout << "Count is " << count << std::endl; }
Aqui, a segunda palavra-chave do arquivoexternoé usado para declarar a primeira contagem foi definida no main.cpp arquivo no. Agora, compilar ambos os arquivos, como segue:
$ g++ main.cpp support.cpp -o write
Isso geraescrever programa executável tenta executar gravação,que irá produzir os seguintes resultados:
$ ./write Count is 5
classe de armazenamento mutável
especificadormutável só se aplica a classes de objetos, que será no final deste tutorial para explicar.Ele permite que os membros das constantes objeto substituto. Isto é, um membro mutáveis podem ser modificados por funções membro const.