¿Qué es una clase de almacenamiento en C ++ y sus tipos?



En este blog de clases de almacenamiento, veremos varias clases de almacenamiento utilizadas en C ++, como auto, register, static, extern y mutable con ejemplos.

Clase de almacenamiento en C++ define la vida útil y la visibilidad de la variable / funciones. La vida útil es la duración hasta la cual la variable permanece activa y la visibilidad es la accesibilidad de una variable de diferentes módulos del programa. Esta ayuda a rastrear la existencia de una variable particular durante el tiempo de ejecución de un programa. En este blog de clases de almacenamiento, veremos varias clases de almacenamiento utilizadas en C ++.

Vamos a empezar.





¿Qué es la clase de almacenamiento en C ++?

Cada variable en C ++ tiene tipo de datos y clase de almacenamiento. El tipo de datos especifica el tipo de datos que se pueden almacenar en una variable como int, float, char, etc. La clase de almacenamiento controla dos propiedades diferentes de una variable: duración y alcance.

Habría visto que cada variable tiene un tipo de datos, pero es posible que no haya visto ninguna clase de almacenamiento adjunta a una variable hasta ahora. En realidad, si no define una clase de almacenamiento, el compilador le asigna automáticamente una clase de almacenamiento predeterminada. La clase de almacenamiento de una variable proporciona información sobre la ubicación de almacenamiento de la variable en la memoria, el valor inicial predeterminado, el alcance de la variable y su vida útil.



Tipos de clase de almacenamiento

Hay cinco clases de almacenamiento en un programa C ++:

  • auto
  • Registrarse
  • estático
  • externo
  • mudable

Analicemos cada una de las clases de almacenamiento en detalle.

Clase de almacenamiento automático

La clase de almacenamiento automático (auto) es la clase de almacenamiento predeterminada para todas las variables locales, que se declaran dentro de una función o un bloque. La palabra clave auto rara vez se usa al escribir una Programa C ++ .



El alcance de las variables automáticas está dentro de la función o bloque donde se han declarado y no se puede acceder fuera de esa función o bloque. También se puede acceder dentro de bloques anidados dentro del bloque / función principal en el que se declaró la variable automática.

Puede acceder a las variables automáticas fuera de su alcance utilizando una variable de puntero. Debe apuntar a la misma ubicación de memoria donde residen las variables.

Su vida útil es la misma que la de la función. Una vez finalizada la ejecución de una función, la variable se destruye.

De forma predeterminada, se les asigna un valor de basura mientras se declara.

Sintaxis:

tipo de datos var_name1 [= valor]

o

tipo de datos automático var_name1 [= valor]

En el ejemplo anterior, se definen dos variables con la misma clase de almacenamiento. Auto solo se puede utilizar para definir variables locales, es decir, dentro de funciones.

Registrar clase de almacenamiento

Como sugiere el nombre, la clase de almacenamiento de registros se utiliza para declarar variables de registro. Toda la funcionalidad de la variable de registro es la misma que la de la variable auto, excepto que el compilador intenta almacenar estas variables en el registro del microprocesador si hay un registro libre disponible. Si no hay un registro libre disponible, estos se almacenan solo en la memoria.

Por lo tanto, las operaciones con variables de registro son mucho más rápidas que las de otras variables que se almacenan en la memoria durante el tiempo de ejecución del programa.

Generalmente, pocas variables a las que se debe acceder con frecuencia en un programa se declaran dentro de la clase de almacenamiento de registros para mejorar el tiempo de ejecución del programa. La dirección de una variable de registro no se puede obtener mediante punteros.

El tamaño máximo de la variable es igual al tamaño del registro (es decir, una palabra aproximadamente). No se le puede aplicar un operador '&' unario, ya que no tiene una ubicación de memoria.

Sintaxis:

registrar el tipo de datos var_name1 [= valor]

Ejemplo:

preguntas de la entrevista del cargador de clases de Java
{registro int pi}

Definir 'registro' no significa que la variable se almacenará en un registro. Puede almacenarse en un registro según las restricciones de implementación y hardware.

Veamos un ejemplo de clases de registro y almacenamiento automático.

Ejemplo:

#include using namespace std // declarando la variable que se va a convertir en extern // también se puede inicializar un valor inicial ax int x void autoStorageClass () {printf ('nDemonstrating auto classnn') // declarando una variable automática (simplemente // escribir 'int a = 32' también funciona) int num = 32 // imprimir la variable auto 'a' printf ('Valor de la variable' num '' 'declarada como auto:% dn', num) printf ( '--------------------------------')} void registerStorageClass () {printf ('nDemonstrating register classnn') / / declarando una variable de registro register char c = 'G' // imprimiendo la variable de registro 'b' printf ('Valor de la variable' c '' 'declarada como registro:% dn', c) printf ('---- ---------------------------- ')} int main () {// Para demostrar la clase de almacenamiento automático autoStorageClass () // Para demostrar registrar Clase de almacenamiento registerStorageClass () return 0}

Salida:

Salida - Clase de almacenamiento en C ++ - EdurekaClase de almacenamiento estático

La clase de almacenamiento estático se usa para declarar variables estáticas . Las variables estáticas conservan su valor (es decir, el último valor) incluso cuando están fuera de su alcance. Las variables estáticas se inicializan solo una vez yexisten hasta la terminación del programa.

La memoria se asigna solo una vez a la variable estática y no se asigna memoria nueva porque no se vuelven a declarar. Se puede acceder a las variables estáticas globales en cualquier parte del programa. De forma predeterminada, el compilador les asigna el valor 0.

En C ++, cuando se usa static en un miembro de datos de clase, solo hace que todos los objetos de su clase compartan una copia de ese miembro.

Sintaxis:

tipo de datos estáticos var_name1 [= valor]

Ejemplo:

#include void function (void) static int c = 5 // Variable 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 } 

Salida:

Clase de almacenamiento externo

La clase de almacenamiento externo es necesaria cuando las variables deben compartirse entre varios archivos. Las variables externas tienen alcance global y estas variables son visibles fuera del archivo en el que están declaradas. La variable extern es visible para todos los programas. Se utiliza si dos o más archivos comparten la misma variable o función.

La vida útil de las variables externas es tan larga como finalice el programa en el que se declaran. Una variable global normal también se puede convertir en externa colocando la palabra clave 'extern' antes de su declaración / definición en cualquier función / bloque.

Cuando utiliza '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.

Sintaxis

tipo de datos externos var_name1

Ejemplo

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

Segundo archivo: support.cpp

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

Aquí, la palabra clave extern se usa para declarar cnt en otro archivo. Ahora compile estos dos archivos de la siguiente manera y menos

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

Esto producirá un programa ejecutable de escritura, intenta ejecutar escritura y verifica el resultado de la siguiente manera & menos

$. / escribir

5

Continuando con la clase de almacenamiento en C ++, echemos un vistazo a la última, es decir, la clase de almacenamiento Mutable.

Clase de almacenamiento mutable

El especificador mutable se aplica solo a los objetos de clase, lo que 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.

Por último, veamos la tabla de comparación para comprender las diferencias entre las diferentes clases de almacenamiento.

Clase de almacenamiento

Palabra clave

comenzando con mysql workbench

Toda la vida

Visibilidad

Valor inicial

Automático

auto

Bloque funcional

Local

Basura

Externo

externo

Programa completo

Global

Cero

Estático

estático

Programa completo

Local

Cero

c ++ cómo usar espacios de nombres

Registrarse

Registrarse

Bloque funcional

Local

Basura

Mudable

mudable

Clase

Local

Basura

Ahora, después de pasar por los programas de C ++ anteriores, habrá entendido cuáles son las diferentes clases de almacenamiento en C ++ y cómo implementarlas. Espero que este blog sea informativo y de valor agregado para ti.

Por tanto, hemos llegado al final de este artículo sobre 'Clases de almacenamiento en C ++'.

Si desea obtener más información, consulte el por Edureka, una empresa de aprendizaje en línea de confianza. El curso de certificación y capacitación Java J2EE y SOA de Edureka está diseñado para capacitarlo en conceptos básicos y avanzados de Java junto con varios marcos de Java como Hibernate y Spring.

Tienes una pregunta para nosotros? Menciónelo en la sección de comentarios de este blog y nos pondremos en contacto con usted lo antes posible.