Classes de stockage en C ++
Une classe de stockage définit la portée (visibilité) et la durée de vie des variables et / ou des fonctions au sein d'un programme C ++. Ces spécificateurs précèdent le type qu'ils modifient. Les classes de stockage suivantes peuvent être utilisées dans un programme C ++
- auto
- register
- static
- extern
- mutable
La classe de stockage automatique
le auto la classe de stockage est la classe de stockage par défaut pour toutes les variables locales.
{
int mount;
auto int month;
}
L'exemple ci-dessus définit deux variables avec la même classe de stockage, auto ne peut être utilisé que dans des fonctions, c'est-à-dire des variables locales.
La classe de stockage de registre
le registerLa classe de stockage est utilisée pour définir les variables locales qui doivent être stockées dans un registre au lieu de la RAM. Cela signifie que la variable a une taille maximale égale à la taille du registre (généralement un mot) et ne peut pas avoir l'opérateur unaire '&' appliqué (car elle n'a pas d'emplacement mémoire).
{
register int miles;
}
Le registre ne doit être utilisé que pour les variables qui nécessitent un accès rapide comme les compteurs. Il convient également de noter que la définition de «registre» ne signifie pas que la variable sera stockée dans un registre. Cela signifie qu'il PEUT être stocké dans un registre en fonction des restrictions matérielles et d'implémentation.
La classe de stockage statique
le staticstorage class indique au compilateur de conserver une variable locale pendant la durée de vie du programme au lieu de la créer et de la détruire chaque fois qu'elle entre et sort de la portée. Par conséquent, rendre les variables locales statiques leur permet de conserver leurs valeurs entre les appels de fonction.
Le modificateur statique peut également être appliqué aux variables globales. Lorsque cela est fait, la portée de cette variable est restreinte au fichier dans lequel elle est déclarée.
En C ++, lorsque statique est utilisé sur un membre de données de classe, une seule copie de ce membre est partagée par tous les objets de sa 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;
}
Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -
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 de stockage externe
le externLa classe de stockage est utilisée pour donner une référence à une variable globale visible par TOUS les fichiers programme. Lorsque vous utilisez «extern», la variable ne peut pas être initialisée car elle ne fait que pointer le nom de la variable vers un emplacement de stockage précédemment défini.
Lorsque vous avez plusieurs fichiers et que vous définissez une variable globale ou une fonction, qui sera également utilisée dans d'autres fichiers, alors extern sera utilisé dans un autre fichier pour donner la référence à la variable ou à la fonction définie. Juste pour comprendre, extern est utilisé pour déclarer une variable globale ou une fonction dans un autre fichier.
Le modificateur extern est le plus couramment utilisé lorsqu'il y a deux fichiers ou plus partageant les mêmes variables globales ou fonctions comme expliqué ci-dessous.
Premier fichier: main.cpp
#include <iostream>
int count ;
extern void write_extern();
main() {
count = 5;
write_extern();
}
Deuxième fichier: support.cpp
#include <iostream>
extern int count;
void write_extern(void) {
std::cout << "Count is " << count << std::endl;
}
Ici, le mot-clé extern est utilisé pour déclarer le nombre dans un autre fichier. Maintenant, compilez ces deux fichiers comme suit -
$g++ main.cpp support.cpp -o write
Cela produira write programme exécutable, essayez d'exécuter write et vérifiez le résultat comme suit -
$./write
5
La classe de stockage mutable
le mutableLe spécificateur s'applique uniquement aux objets de classe, qui sont abordés plus loin dans ce didacticiel. Il permet à un membre d'un objet de remplacer la fonction membre const. Autrement dit, un membre mutable peut être modifié par une fonction membre const.