Clases de almacenamiento en C ++
Una clase de almacenamiento define el alcance (visibilidad) y el tiempo de vida de las variables y / o funciones dentro de un programa C ++. Estos especificadores preceden al tipo que modifican. Existen las siguientes clases de almacenamiento, que se pueden utilizar en un programa C ++
- auto
- register
- static
- extern
- mutable
La clase de almacenamiento automático
los auto La clase de almacenamiento es la clase de almacenamiento predeterminada para todas las variables locales.
{
int mount;
auto int month;
}
El ejemplo anterior define dos variables con la misma clase de almacenamiento, auto solo se puede usar dentro de funciones, es decir, variables locales.
La clase de almacenamiento de registro
los registerLa clase de almacenamiento se utiliza para definir variables locales que deben almacenarse en un registro en lugar de RAM. Esto significa que la variable tiene un tamaño máximo igual al tamaño del registro (generalmente una palabra) y no se le puede aplicar el operador unario '&' (ya que no tiene una ubicación de memoria).
{
register int miles;
}
El registro solo debe usarse para variables que requieren acceso rápido, como contadores. También debe tenerse en cuenta que definir 'registro' no significa que la variable se almacenará en un registro. Significa que PODRÍA almacenarse en un registro dependiendo del hardware y las restricciones de implementación.
La clase de almacenamiento estático
los staticLa clase de almacenamiento le indica al compilador que mantenga una variable local en existencia durante la vida útil del programa en lugar de crearla y destruirla cada vez que entra y sale del alcance. Por lo tanto, hacer que las variables locales sean estáticas les permite mantener sus valores entre llamadas a funciones.
El modificador estático también se puede aplicar a variables globales. Cuando se hace esto, hace que el alcance de esa variable se restrinja al archivo en el que se declara.
En C ++, cuando se usa static en un miembro de datos de clase, hace que solo una copia de ese miembro sea compartida por todos los objetos de su clase.
#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;
}
Cuando se compila y ejecuta el código anterior, produce el siguiente 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
La clase de almacenamiento externo
los externLa clase de almacenamiento se usa para dar una referencia de una variable global que es visible para TODOS los archivos de programa. Cuando usa 'extern', la variable no se puede inicializar ya que todo lo que hace es apuntar el nombre de la variable a una ubicación de almacenamiento que se ha definido previamente.
Cuando tiene varios archivos y define una variable o función global, que también se usará en otros archivos, entonces extern se usará en otro archivo para dar referencia a la variable o función definida. Solo para entender, extern se usa para declarar una variable o función global en otro archivo.
El modificador extern se usa más comúnmente cuando hay dos o más archivos que comparten las mismas variables o funciones globales, como se explica a continuación.
Primer archivo: main.cpp
#include <iostream>
int count ;
extern void write_extern();
main() {
count = 5;
write_extern();
}
Segundo archivo: support.cpp
#include <iostream>
extern int count;
void write_extern(void) {
std::cout << "Count is " << count << std::endl;
}
Aquí, la palabra clave extern se utiliza para declarar el recuento en otro archivo. Ahora compile estos dos archivos de la siguiente manera:
$g++ main.cpp support.cpp -o write
Esto producirá write programa ejecutable, intente ejecutar write y verifique el resultado de la siguiente manera:
$./write
5
La clase de almacenamiento mutable
los mutableEl especificador se aplica solo a los objetos de clase, que se describen más adelante en este tutorial. Permite que un miembro de un objeto anule la función de miembro constante. Es decir, un miembro mutable puede ser modificado por una función de miembro constante.