Que signifie exactement « statique » signifie la déclaration des variables « globales » dans C ++?
-
26-09-2019 - |
Autres conseils
Cela signifie que la variable est locale à une unité de traduction (tout simplement, à un seul fichier source), et ne peut être accessible depuis l'extérieur. Cette utilisation de l'électricité statique est en fait dépréciée dans le courant C ++ standard - au lieu que vous êtes censé utiliser les espaces de noms anonymes:
static int x = 0;
devrait être:
namespace {
int x = 0;
}
Ce truc semble être assez bien couvert ici .
Mais pour paraphraser, il y a 2 utilisations dans C
- Empêcher l'utilisation d'une variable globale en dehors du champ d'application du fichier qui le définit.
-
Autoriser les variables locales au sein d'une fonction de persister accross invocations de la fonction, comme dans
int getNextId () { int id = 0 statique; retourner id ++; }
C ++ hérite de ces deux, et ajoute deux utilisations propres.
- variables membres statiques: Les variables sont « partagées » accross toutes les instances d'une classe, et peut également être accès sans référence à une instance de la classe. Shared semble que le mauvais mot, mais en substance, je beleive que le résultat est que toute référence à une variable références membres de statique même emplacement mémoire.
- méthodes statiques. Les méthodes qui peuvent être appelées sans référence à une instance spécifique de la classe qui la définit
statique signifie essentiellement qu'une variable est liée à la durée de vie du programme et non d'une fonction donnée ou instance de classe. Quand devez-vous l'utiliser? Ne pas. Quel est le but? les données de débogage, la plupart du temps.
En général, en C ++, si vous vous trouvez à l'aide des données statiques, vous avez fait mal. Il y a des moments où il est approprié, mais ils sont très rares.
Lorsque statique est utilisé dans une classe en C ++, cela signifie plus ou moins la même chose qu'il fait en Java. Pour les variables, cela signifie que l'une d'une instance de la variable existe pour toutes les classes et fonctions, cela signifie que la fonction n'accède pas implicitement ce pointeur du tout.
En C et C ++ lorsque statique est utilisé pour une variable globale ou d'une fonction, cela signifie que la variable ne peut être référencé dans le courant C ou le dossier C. En d'autres termes, le compilateur ne doit pas générer des symboles de déplacement pour la variable ou la fonction.
Lorsque statique est utilisé à côté d'une variable dans une fonction locale, cela signifie que la variable ne va pas hors de portée, mais conservera sa valeur de fonction appel à la fonction d'appel. La variable devient effectivement une variable globale qui ne peut être accessible à partir de la fonction donnée.
membres de la classe statiques sont des données et des fonctions qui sont associées à la classe elle-même, plutôt que les objets de la classe.
Dans l'exemple suivant, la classe Fred a un x_ membre de données statiques et une y_ instance de membre de données. Il n'y a qu'une seule copie de Fred :: x_ quel que soit le nombre d'objets Fred sont créés (y compris aucun objet Fred), mais il y a une y_ par objet Fred. Ainsi x_ est dit être associée à la classe et y_ est dit être associé à un objet individuel de la classe. De même classe Fred a une fonction membre statique f () et un g () de la fonction de membre de l'instance.
class Fred {
public:
static void f() throw(); <-- 1
void g() throw(); <-- 2
protected:
static int x_; <-- 3
int y_; <-- 4
};
(1) fonction de membre associé à la classe
(2) de la fonction de membre associé à un objet individuel de la classe
(3) élément de données associé à la classe
(4) d'élément de données associé à un objet individuel de la classe
Utilisation:
Lorsque vous voulez garder les voies du nombre d'instances d'une classe que vous avez créé utilisez variable statique. Par exemple, dans une « voiture » classe chaque instance de voiture peut avoir un numéro de série unique (_y dans ce cas) et l'entreprise peut vouloir garder une trace du nombre de voitures produites (_x dans ce cas).