Classes de armazenamento em C++
Uma classe de armazenamento define o escopo (visibilidade) e o tempo de vida de variáveis e/ou funções dentro de um programa C++. Esses especificadores precedem o tipo que eles modificam. Existem as seguintes classes de armazenamento, que podem ser usadas em um programa C++
- automático
- registrar
- estático
- externo
- mutável
A classe de armazenamento automático
O automático classe de armazenamento é a classe de armazenamento padrão para todas as variáveis locais.
{ int mount; auto int month; }
O exemplo acima define duas variáveis com a mesma classe de armazenamento, auto só pode ser usado dentro de funções, ou seja, variáveis locais.
A classe de armazenamento de registro
O registro A classe de armazenamento é usada para definir variáveis locais que devem ser armazenadas em um registrador em vez de na RAM. Isso significa que a variável tem um tamanho máximo igual ao tamanho do registrador (geralmente uma palavra) e não pode ter o operador unário '&' aplicado a ela (pois não possui um local de memória).
{ register int miles; }
O registro deve ser usado apenas para variáveis que requerem acesso rápido, como contadores. Deve-se notar também que definir 'registro' não significa que a variável será armazenada em um registro. Isso significa que PODE ser armazenado em um registro dependendo das restrições de hardware e implementação.
A classe de armazenamento estático
A estática A classe de armazenamento instrui o compilador a manter uma variável local em existência durante o tempo de vida do programa, em vez de criá-la e destruí-la cada vez que ela entra e sai do escopo. Portanto, tornar as variáveis locais estáticas permite que elas mantenham seus valores entre as chamadas de função.
O modificador estático também pode ser aplicado a variáveis globais. Quando isso é feito, faz com que o escopo dessa variável fique restrito ao arquivo no qual ela é declarada.
Em C++, quando static é usado em um membro de dados de classe, ele faz com que apenas uma cópia desse membro seja compartilhada por todos os objetos de sua classe.
Demonstração ao vivo
#include <iostream> // Function declaration void func(void); static int count = 10; /* Global variable */ main() { while(count--) { func(); } return 0; } // Function definition void func( void ) { static int i = 5; // local static variable i++; std::cout << "i is " << i ; std::cout << " and count is " << count << std::endl; }
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
i is 6 and count is 9 i is 7 and count is 8 i is 8 and count is 7 i is 9 and count is 6 i is 10 and count is 5 i is 11 and count is 4 i is 12 and count is 3 i is 13 and count is 2 i is 14 and count is 1 i is 15 and count is 0
A classe de armazenamento externo
O externo A classe de armazenamento é usada para fornecer uma referência de uma variável global que é visível para TODOS os arquivos de programa. Quando você usa 'extern', a variável não pode ser inicializada, pois tudo o que ela faz é apontar o nome da variável para um local de armazenamento que foi definido anteriormente.
Quando você tem vários arquivos e define uma variável ou função global, que também será usada em outros arquivos, então extern será usado em outro arquivo para fornecer referência de variável ou função definida. Apenas para entender extern é usado para declarar uma variável global ou função em outro arquivo.
O modificador extern é mais comumente usado quando há dois ou mais arquivos compartilhando as mesmas variáveis globais ou funções, conforme explicado abaixo.
Primeiro arquivo:main.cpp
#include <iostream> int count ; extern void write_extern(); main() { count = 5; write_extern(); }
Segundo arquivo:support.cpp
#include <iostream> extern int count; void write_extern(void) { std::cout << "Count is " << count << std::endl; }
Aqui, externo palavra-chave está sendo usada para declarar contagem em outro arquivo. Agora compile esses dois arquivos da seguinte forma -
$g++ main.cpp support.cpp -o write
Isso produzirá escrever programa executável, tente executar write e verifique o resultado da seguinte forma -
$./write 5
A classe de armazenamento mutável
O mutável especificador se aplica apenas a objetos de classe, que são discutidos posteriormente neste tutorial. Ele permite que um membro de um objeto substitua a função de membro const. Ou seja, um membro mutável pode ser modificado por uma função de membro const.
Linguagem C