Maison > développement back-end > C++ > Quand les variables statiques sont-elles initialisées ?

Quand les variables statiques sont-elles initialisées ?

Susan Sarandon
Libérer: 2024-11-27 02:38:10
original
508 Les gens l'ont consulté

When are Static Variables Initialized?

Allocation et initialisation des variables statiques

En ce qui concerne l'allocation et l'initialisation des variables, le timing peut varier en fonction de la portée de la variable. Les variables globales, comme mentionné, sont allouées au démarrage du programme. Mais qu'en est-il des variables statiques déclarées dans les fonctions ?

Allocation des variables statiques

Dans le scénario donné, la variable statique globalish est allouée au démarrage du programme, comme les variables globales. En effet, les variables statiques ont une durée de vie plus longue que les variables locales, conservant leurs valeurs même lorsque la fonction dans laquelle elles sont définies se termine.

Initialisation des variables statiques

Le moment d'initialisation des variables statiques est où les choses deviennent intéressantes. Contrairement aux variables globales, les variables statiques ne sont pas initialisées au démarrage du programme. Au lieu de cela, ils sont initialisés uniquement lorsque la fonction à laquelle ils appartiennent est appelée pour la première fois. Ce comportement est évident dans l'exemple de programme fourni :

void doSomething()
{
  static bool globalish = true; // Initialization occurs here
  // ...
}
Copier après la connexion

Dans ce cas, l'initialisation de globalish se produit lorsque doSomething() est exécuté pour la première fois, et non au moment du démarrage du programme. Cette initialisation tardive est appelée « initialisation paresseuse ».

La raison de cette initialisation retardée est d'éviter une initialisation inutile pour des variables statiques qui ne peuvent jamais être utilisées. Si le programme n'appelle jamais la fonction qui déclare la variable statique, il économise de la mémoire et du temps de calcul en ne l'initialisant pas.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal