Initialisation des variables membres statiques en C
En C, les variables membres statiques sont initialisées en dehors de la définition de la classe. Ce choix de conception a soulevé des questions concernant son raisonnement logique et ses implications potentielles en matière d'héritage.
Raison de l'initialisation externe
Les membres statiques doivent être définis dans exactement une unité de traduction pour adhérer la règle d’une définition. Si l'initialisation était autorisée au sein de la classe, plusieurs définitions pourraient apparaître dans différentes unités de traduction où le fichier d'en-tête est inclus.
Exemple
Considérez l'extrait de code suivant :
struct Gizmo { static string name = "Foo"; };
Si le nom devait être initialisé au sein de la classe, il serait défini dans chaque unité de traduction qui inclut le fichier d'en-tête. Cela violerait la règle de définition unique.
Membres statiques intégraux
C permet l'initialisation de membres statiques intégraux dans la déclaration. Cependant, une définition externe est toujours requise au sein d'une seule unité de traduction pour satisfaire à la règle d'une définition. Cela sert de raccourci syntaxique :
struct Gizmo { static const int count = 42; };
Tant que l'expression utilisée dans l'initialisation est de type const intégral ou énumération, peut être évaluée au moment de la compilation et qu'une définition existe dans une seule unité de traduction, cette approche est valable. Par exemple :
gizmo.cpp
#include "gizmo.h" const int Gizmo::count;
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!