Maison > développement back-end > C++ > Pourquoi ne puis-je pas initialiser les membres statiques et les tableaux directement dans une classe C ?

Pourquoi ne puis-je pas initialiser les membres statiques et les tableaux directement dans une classe C ?

Linda Hamilton
Libérer: 2024-12-08 06:08:11
original
737 Les gens l'ont consulté

Why Can't I Initialize Static Members and Arrays Directly in a C   Class?

Pourquoi je ne parviens pas à initialiser un membre statique non const ou des tableaux statiques dans une classe ?

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.

Raison de la restriction de l'initialisation des membres statiques non constants

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.

Raison de la restriction de l'initialisation des tableaux statiques

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.

Exception pour les types Const Integral et Enum

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.

Solution de contournement pour l'initialisation de tableau

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.

Évolution en C 11

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!

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