/ / Une variable statique peut-elle exister sans une classe en C ++? - c ++

Une variable statique peut-elle exister sans classe en C ++? - c ++

Des variables statiques peuvent-elles exister n'importe où dans C ++ autrement que dans une classe? Si oui, quel comportement ont-ils? Je suppose qu'ils "ne sont pas partagés entre les instances car il n'y a pas d'objet.

Réponses:

3 pour la réponse № 1

Oui.

La durée de vie d'un objet statique est la vie du programme et la liaison de l'objet est interne si la variable est déclarée à la portée du fichier (et aucune liaison si elle est définie à la portée du bloc).


1 pour la réponse № 2

En dehors d'une fonction, statique signifie local pour cette unité de compilation. Vous pouvez obtenir le même effet avec un espace de noms anonyme.


1 pour la réponse № 3

Bien sûr, par exemple:

int sequence()
{
static int result = 0;
return ++result;
}

Donc, ici, la variable de résultat continuera d'exister en dehors de la portée de la fonction et augmentera constamment chaque fois que vous entrez dans la fonction.


1 pour la réponse № 4

Deux autres endroits:

  1. Variables globales et fonctions

    • Global static les variables (ou fonctions) sont locales à cette unité de compilation et ne peuvent pas être "vues" par d'autres unités de compilation
  2. Variables locales

    • static les variables locales sont initialisées une fois lorsque leurla déclaration est croisée pour la première fois (utile pour faire des choses seulement lors du premier appel d'une fonction), et ensuite, elles conservent leur valeur même après le retour et le rappel de la fonction

Notez que ces différentes utilisations de static vraiment rien à faire les uns avec les autres. static signifie différentes choses selon l'endroit où vous l'utilisez, un peu comme const.


0 pour la réponse № 5

Cela dépend de ce que vous entendez par une variable statique. le static mot-clé a une sémantique différente selon la situation dans laquelle vous l'utilisez.

Les variables membres, lorsqu'elles sont déclarées statiques, ontdurée de stockage statique. Cela signifie que la durée de vie de ces variables dure pendant toute la durée du programme. C'est le sens commun d'une "variable statique". Il existe 3 cas dans lesquels une variable aura une durée de stockage statique:

  1. Quand le static mot-clé est utilisé sur une variable locale (portée de la fonction).
  2. Quand le static mot-clé est appliqué à une variable membre de la classe.
  3. Toute variable qui n'a pas de durée de stockage dynamique ou de thread et qui n'est pas une variable locale.

Exemple:

struct foo
{
static int x; // This has static storage duration
};

void bar()
{
static int y = 5; // This has static storage duration
}

int z = 1; // This has static storage duration

Donc, pour répondre à votre question comme si elle était "Peutles variables ont une durée de stockage statique lorsqu'elles ne sont pas membres d'une classe? ", la réponse est oui. Une variable de portée globale ou d'espace de nom a une durée de stockage statique par défaut. Une variable de portée de fonction déclarée comme statique a également une durée de stockage statique.

Cependant, le static mot-clé a une autre signification lorsqu'il est utilisé sur des variables de portée globale ou d'espace de noms. Pour ces, static spécifie que la variable a un lien interne. Autrement dit, ils ne peuvent être référencés que dans la même unité de traduction.

Exemple:

static int i = 5; // This has internal linkage