Las clases de almacenamiento o (storage classes) son un conjunto de especificadores que determinan la vida útil, el scope y la visibilidad de las variables y funciones dentro de un programa.
Los especificadores permiten cómo almacenar una variable y cómo acceder a ciertas partes del programa.
Clases de almacenamiento
Existen seis clases de almacenamiento, en C++ son las siguientes:
Clase de almacenamiento automático (auto)
Este es el tipo por defecto para variables locales, son aquellas variables que se declaran dentro de una función. No es necesario especificar el keyword auto
, puesto que son variables automáticas.
Clase de almacenamiento externo (extern)
Es usado para declarar una variable o función que se define en otro archivo o en otro punto del programa, permitiendo compartir variables y funciones entre distintos archivos de C++.
Clase de almacenamiento estático (static)
Cumple diferentes funciones dependiendo de su aplicación. Las variables estáticas tienen la propiedad de conservar su valor incluso si esta se encuentre fuera de su alcance (scope).
Es así, que las variables estáticas conservan su valor de su último scope que fue definido.
Clase de almacenamiento registro (register)
Tiene la misma funcionalidad que la de las variables automáticas, la diferencia es que sugiere almacenar la variable en un registro de la CPU en lugar de la memoria principal (si es posible).
Esto hace que el acceso a la variable sea más rápido. No obstante, solo es una sugerencia del compilador, no garantiza que la variable sea almacenada en un registro.
Clase de almacenamiento mutado (mutable)
Permite modificar un miembro de un objeto 'const'
, normalmente no se pueden modificar miembros de un objeto que han sido declarado como una constante, pero si un miembro está declarado como mutable
se permite su modificación.
Este especificador mutable
no afecta el vícnulo ni la vida útil del objeto porque será igual al objeto declarado en ese lugar.
Clase de almacenamiento thread_local
Define el objeto como 'hilo local'; esta variable se puede combinar con otros especificadores de almacenamiento como static
o extern
, provocando que las propiedades de un thread_local
cambien.
Estructura de clase de almacenamiento
clase de almacenamiento | especificador | vida útil | visibilidad | valor inicial |
---|---|---|---|---|
Automático | auto |
Bloque de funciones | local | Basura |
Externo | extern |
Programa completo | Global | 0 |
Estático | static |
Programa completo | Local | 0 |
Registro | register |
Bloque de funciones | Local | Basura |
Mutado | mutable |
Clases | Local | Basura |
Hilo local | thread_local |
Hilo entero | Local o global | Basura |
Las storage classes sirven para una mejor administración del ciclo de vida, visibilidad de variables y funciones del programa. De los especificadores más usados tenemos a static
, extern
y mutable
.