Classi di archiviazione in C ++

Una classe di archiviazione definisce l'ambito (visibilità) e la durata delle variabili e / o delle funzioni all'interno di un programma C ++. Questi specificatori precedono il tipo che modificano. Sono disponibili le seguenti classi di archiviazione, che possono essere utilizzate in un programma C ++

  • auto
  • register
  • static
  • extern
  • mutable

La classe di archiviazione automatica

Il auto classe di archiviazione è la classe di archiviazione predefinita per tutte le variabili locali.

{
   int mount;
   auto int month;
}

L'esempio sopra definisce due variabili con la stessa classe di archiviazione, auto può essere utilizzato solo all'interno di funzioni, cioè variabili locali.

La classe di archiviazione del registro

Il registerLa classe di archiviazione viene utilizzata per definire le variabili locali che dovrebbero essere memorizzate in un registro invece che nella RAM. Ciò significa che la variabile ha una dimensione massima pari alla dimensione del registro (di solito una parola) e non può essere applicato l'operatore unario "&" (poiché non ha una posizione di memoria).

{
   register int  miles;
}

Il registro deve essere utilizzato solo per variabili che richiedono un accesso rapido come i contatori. Va inoltre notato che la definizione di "registro" non significa che la variabile verrà memorizzata in un registro. Significa che POTREBBE essere memorizzato in un registro a seconda dell'hardware e delle restrizioni di implementazione.

La classe di archiviazione statica

Il staticstorage class indica al compilatore di mantenere una variabile locale in esistenza durante il ciclo di vita del programma invece di crearla e distruggerla ogni volta che entra e esce dallo scope. Pertanto, rendere statiche le variabili locali consente loro di mantenere i propri valori tra le chiamate di funzione.

Il modificatore statico può essere applicato anche alle variabili globali. Quando viene eseguita, l'ambito di tale variabile viene limitato al file in cui è dichiarato.

In C ++, quando static viene utilizzato su un membro dei dati di una classe, viene condivisa una sola copia di tale membro da tutti gli oggetti della sua classe.

#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 il codice precedente viene compilato ed eseguito, produce il seguente risultato:

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

La classe di archiviazione esterna

Il externLa classe di archiviazione viene utilizzata per fornire un riferimento a una variabile globale visibile a TUTTI i file di programma. Quando si utilizza 'extern' la variabile non può essere inizializzata poiché tutto ciò che fa è puntare il nome della variabile in una posizione di archiviazione che è stata precedentemente definita.

Quando si hanno più file e si definisce una variabile o una funzione globale, che verrà utilizzata anche in altri file, extern verrà utilizzato in un altro file per fornire un riferimento alla variabile o alla funzione definita. Solo per comprendere extern viene utilizzato per dichiarare una variabile o una funzione globale in un altro file.

Il modificatore extern è più comunemente usato quando ci sono due o più file che condividono le stesse variabili o funzioni globali come spiegato di seguito.

Primo file: main.cpp

#include <iostream>
int count ;
extern void write_extern();
 
main() {
   count = 5;
   write_extern();
}

Secondo file: support.cpp

#include <iostream>

extern int count;

void write_extern(void) {
   std::cout << "Count is " << count << std::endl;
}

Qui, la parola chiave extern viene utilizzata per dichiarare il conteggio in un altro file. Ora compila questi due file come segue:

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

Questo produrrà write programma eseguibile, prova ad eseguire write e controlla il risultato come segue:

$./write
5

La mutabile classe di archiviazione

Il mutablelo specificatore si applica solo agli oggetti classe, discussi più avanti in questo tutorial. Consente a un membro di un oggetto di sovrascrivere la funzione membro const. Ovvero, un membro mutabile può essere modificato da una funzione membro const.