En C, données statiques les membres d'une classe ne peuvent pas être initialisés directement dans la définition de la classe, sauf dans certains cas spécifiques. cas.
Les données membres statiques sont allouées dans le segment de mémoire du programme et sont partagées entre toutes les instances de la classe. La norme C interdit leur initialisation en classe pour empêcher plusieurs définitions de la même variable dans plusieurs unités de traduction.
De même, Les tableaux statiques d'une classe ne peuvent pas être initialisés en classe car les tableaux occupent un bloc de mémoire contigu. Autoriser l'initialisation en classe entraînerait la création de plusieurs copies du même tableau dans chaque unité de traduction, ce qui entraînerait un comportement inattendu.
Une exception à ces règles est faite pour les types intégraux const statiques et les types d'énumération. Ces types peuvent être initialisés en classe car ils sont traités comme des constantes de compilation et leurs valeurs sont connues au moment de la compilation.
Pour initialiser un tableau statique dans une classe, vous pouvez utiliser le "enum trick":
enum { arrsize = 2 };
static const int c[arrsize] = { 1, 2 };
Cette approche déclare une constante d'énumération arrsize pour déterminer la taille du tableau, qui est ensuite utilisée pour initialiser la const statique tableau c.
C 11 a quelque peu assoupli ces restrictions. Désormais, les données membres statiques de certains types, appelés « types littéraux », peuvent être initialisées en classe à l’aide d’un initialiseur accolade ou égal. De plus, C 11 permet aux données membres non statiques d'être initialisées en classe à l'aide d'expressions constantes.
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!