Maison > développement back-end > C++ > Quelles garanties existent concernant l'ordre d'initialisation des membres statiques de la classe C ?

Quelles garanties existent concernant l'ordre d'initialisation des membres statiques de la classe C ?

Patricia Arquette
Libérer: 2024-12-30 13:13:07
original
271 Les gens l'ont consulté

What Guarantees Exist Regarding the Initialization Order of Static C   Class Members?

Initialisation des membres de classe C statiques

En C, il peut être difficile de déterminer quand les membres de classe statiques sont initialisés. Cependant, certaines hypothèses sûres peuvent être faites.

Ordre d'initialisation garanti au sein d'une unité de traduction

La norme C précise que pour les objets définis dans la même unité de traduction :

  • Leur stockage est initialisé à zéro avant toute autre initialisation.
  • Objets avec une durée de stockage statique initialisés avec les expressions constantes sont initialisées avant l'initialisation dynamique.
  • Les objets définis dans la portée de l'espace de noms sont initialisés dans l'ordre de leur définition.

Initialisation avant utilisation

Deuxièmement, la norme garantit que l'initialisation des objets statiques dans une unité de traduction sera terminée avant qu'un objet ou une fonction de cette unité ne soit utilisé.

Exemple

Sur la base de ces principes, supposons le code suivant :

struct A {
  static int x;
};

struct B {
  static int y;
};

int main() {
  return A::x + B::y;
}
Copier après la connexion

Dans ce cas, vous pouvez supposer en toute sécurité que le l'initialisation de A::x et B::y se produira avant l'appel de main(). Cela vous permet d'accéder en toute sécurité à ces variables statiques dans main(). Cependant, notez que l'ordre d'initialisation entre A::x et B::y est défini par l'implémentation et peut ne pas être cohérent entre les différents compilateurs ou architectures.

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