O que é uma classe de armazenamento em C ++ e seus tipos?



Neste blog de classes de armazenamento, veremos várias classes de armazenamento usadas em C ++, como auto, register, static, extern e mutable com exemplos.

Classe de armazenamento em C ++ define o tempo de vida e visibilidade da variável / funções. Lifetime é a duração até a qual a variável permanece ativa e a visibilidade é a acessibilidade de uma variável de diferentes módulos do programa. este ajuda a rastrear a existência de uma determinada variável durante o tempo de execução de um programa. Neste blog de classes de armazenamento, veremos várias classes de armazenamento usadas em C ++.

Vamos começar.





O que é classe de armazenamento em C ++?

Cada variável em C ++ tem tipo de dados e classe de armazenamento. O tipo de dados especifica o tipo de dados que podem ser armazenados em uma variável, como int, float, char, etc. A classe de armazenamento controla duas propriedades diferentes de uma variável: duração e escopo.

Você deve ter visto que cada variável tem um tipo de dados, mas pode não ter visto nenhuma classe de armazenamento anexada a uma variável até agora. Na verdade, se você não definir uma classe de armazenamento, o compilador atribuirá automaticamente uma classe de armazenamento padrão a ela. A classe de armazenamento de uma variável fornece informações sobre o local de armazenamento da variável na memória, valor inicial padrão, escopo da variável e seu tempo de vida.



Tipos de classe de armazenamento

Existem cinco classes de armazenamento em um Programa C ++:

  • auto
  • registro
  • estático
  • externo
  • mutável

Vamos discutir cada uma das classes de armazenamento em detalhes.

Auto Storage Class

A classe de armazenamento automático (automático) é a classe de armazenamento padrão para todas as variáveis ​​locais, que são declaradas dentro de uma função ou bloco. A palavra-chave auto raramente é usada ao escrever um Programa C ++ .



O escopo das variáveis ​​automáticas está dentro da função ou bloco onde foram declaradas e não pode ser acessado fora dessa função ou bloco. Ele também pode ser acessado em blocos aninhados dentro do bloco / função pai em que a variável automática foi declarada.

Você pode acessar variáveis ​​automáticas fora de seu escopo usando uma variável de ponteiro. Você precisa apontar para o mesmo local da memória onde as variáveis ​​residem.

Seu tempo de vida é igual ao tempo de vida da função. Uma vez finalizada a execução de uma função, a variável é destruída.

Por padrão, o valor garbage é atribuído a eles durante a declaração.

Sintaxe:

datatype var_name1 [= value]

ou

tipo de dados automático var_name1 [= valor]

No exemplo acima, duas variáveis ​​são definidas com a mesma classe de armazenamento. Auto só pode ser usado para definir variáveis ​​locais, ou seja, dentro de funções.

Registrar classe de armazenamento

Como o nome sugere, a classe de armazenamento de registro é usada para declarar variáveis ​​de registro. Toda a funcionalização da variável de registro é igual à variável auto, exceto que o compilador tenta armazenar essas variáveis ​​no registro do microprocessador se um registro livre estiver disponível. Se um registro gratuito não estiver disponível, eles serão armazenados apenas na memória.

Assim, as operações nas variáveis ​​de registro são muito mais rápidas do que as outras variáveis ​​armazenadas na memória durante o tempo de execução do programa.

Geralmente, poucas variáveis ​​que precisam ser acessadas com frequência em um programa são declaradas dentro da classe de armazenamento de registro para melhorar o tempo de execução do programa. O endereço de uma variável de registro não pode ser obtido usando ponteiros.

O tamanho máximo da variável é igual ao tamanho do registro (ou seja, uma palavra aproximadamente). Ele não pode ter um operador unário ‘&’ aplicado a ele, pois não tem um local de memória.

Sintaxe:

registrar tipo de dados var_name1 [= valor]

Exemplo:

pivot e unpivot no servidor sql
{registrar int pi}

Definir 'registro' não significa que a variável será armazenada em um registro. Ele pode ser armazenado em um registro dependendo das restrições de hardware e implementação.

Vejamos um exemplo de classes de registro e armazenamento automático.

Exemplo:

#include usando namespace std // declarando a variável que deve ser feita extern // um valor inicial também pode ser inicializado para x int x void autoStorageClass () {printf ('nDemonstrating auto classnn') // declarando uma variável automática (simplesmente // escrever 'int a = 32' também funciona) int num = 32 // imprimir a variável automática 'a' printf ('Valor da variável' num '' 'declarada como automática:% dn', num) printf ( '--------------------------------')} void registerStorageClass () {printf ('nDemonstrating register classnn') / / declarando uma variável de registro registrador char c = 'G' // imprimindo a variável de registro 'b' printf ('Valor da variável' c '' 'declarada como registro:% dn', c) printf ('---- ---------------------------- ')} int main () {// Para demonstrar a classe de armazenamento auto autoStorageClass () // Para demonstrar registrar classe de armazenamento registerStorageClass () retornar 0}

Resultado:

Saída - classe de armazenamento em C ++ - EdurekaClasse de armazenamento estático

A classe de armazenamento estático é usada para declarar variáveis ​​estáticas . Variáveis ​​estáticas preservam seu valor (ou seja, o último valor) mesmo quando estão fora de seu escopo. Variáveis ​​estáticas são inicializadas apenas uma vez &existir até o término do programa.

A memória é alocada apenas uma vez para a variável estática e nenhuma nova memória é alocada porque elas não são declaradas novamente. Variáveis ​​estáticas globais podem ser acessadas em qualquer lugar do programa. Por padrão, eles recebem o valor 0 pelo compilador.

Em C ++, quando estático é 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.

Sintaxe:

tipo de dados estático var_name1 [= valor]

Exemplo:

#include void function (void) static int c = 5 // Variável estática global main () {while (c--) {function ()} return 0} void function (void) {static int cnt = 2 cnt ++ std :: cout<< 'cnt is ' << cnt std::cout << ' and c is ' << c << std::endl } 

Resultado:

Classe de armazenamento externo

A classe de armazenamento externo é necessária quando as variáveis ​​precisam ser compartilhadas entre vários arquivos. Variáveis ​​externas têm escopo global e essas variáveis ​​são visíveis fora do arquivo no qual foram declaradas. A variável externa é visível para todos os programas. É usado se dois ou mais arquivos compartilham a mesma variável ou função.

O tempo de vida das variáveis ​​externas é enquanto o programa no qual são declaradas for encerrado. Uma variável global normal pode ser feita externamente, bem como colocando a palavra-chave ‘extern’ antes de sua declaração / definição em qualquer função / bloco.

Quando você usa 'extern', a variável não pode ser inicializada, pois tudo o que ela faz é apontar o nome da variável em um local de armazenamento que foi definido anteriormente.

Sintaxe

tipo de dados externos var_name1

Exemplo

#include int cnt extern void write_extern () main () {cnt = 5 write_extern ()}

Segundo arquivo: support.cpp

#include extern int cnt void write_extern (void) {std :: cout<< 'Count is ' << cnt << std::endl } 

Aqui, a palavra-chave extern está sendo usada para declarar cnt em outro arquivo. Agora compile esses dois arquivos da seguinte forma e menos

$ g ++ main.cpp support.cpp -o write

Isto irá produzir um programa executável de escrita, tente executar a escrita e verifique o resultado como segue & menos

$. / write

5

Prosseguindo com a classe de armazenamento em C ++, vamos dar uma olhada na última, ou seja, classe de armazenamento mutável.

Classe de armazenamento mutável

O especificador mutável se aplica apenas a objetos de classe, o que 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.

restrições em sql com exemplo

Por fim, vamos dar uma olhada na tabela de comparação para entender as diferenças entre as diferentes classes de armazenamento.

Classe de Armazenamento

Palavra-chave

Vida

Visibilidade

Valor inicial

Automático

auto

Bloco Funcional

Local

Lixo

Externo

externo

Programa Completo

Global

Zero

Estático

estático

como converter um número em binário em python

Programa Completo

Local

Zero

Registro

registro

Bloco Funcional

Local

Lixo

Mutável

mutável

Classe

Local

Lixo

Agora, depois de passar pelos programas C ++ acima, você deve ter entendido quais são as diferentes classes de armazenamento em C ++ e como implementá-las. Espero que este blog seja informativo e agregue valor para você.

Assim, chegamos ao fim deste artigo sobre ‘Classes de armazenamento em C ++’.

Se você deseja saber mais, confira o pela Edureka, uma empresa de aprendizagem online confiável. O curso de certificação e treinamento Java J2EE e SOA da Edureka foi projetado para treiná-lo tanto para os conceitos básicos e avançados do Java, juntamente com várias estruturas Java como Hibernate e Spring.

Tem alguma questão para nós? Mencione isso na seção de comentários deste blog e entraremos em contato com você o mais breve possível.