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

Pourquoi ne puis-je pas initialiser des membres statiques et des tableaux non constants dans une classe C ?

Barbara Streisand
Libérer: 2024-12-14 16:33:12
original
431 Les gens l'ont consulté

Why Can't I Initialize Non-Constant Static Members and Arrays Inside a C   Class?

Comprendre l'impossibilité d'initialiser des membres statiques et des tableaux non constants dans les classes

En C , il existe une limitation interdisant l'initialisation de membres statiques non constants ou de tableaux statiques tableaux dans une déclaration de classe. Pour clarifier, examinons les mécanismes derrière cette restriction et ses ramifications.

Pourquoi les membres de données statiques ne peuvent pas être initialisés

La norme du langage C indique explicitement que seuls les types d'intégrales ou d'énumérations constantes statiques peuvent être initialisé lors de la définition de la classe. Par exemple, dans l'extrait de code fourni, le membre de données statique a est de type const int, qui peut être initialisé, alors que d'autres membres comme b ne le sont pas.

Cette restriction découle du fait que les membres statiques sont partagés entre toutes les instances d'une classe. Pour garantir l'unicité et la cohérence, la norme exige que tous les membres statiques aient une définition unique et bien définie en dehors de la déclaration de classe.

Pourquoi les tableaux statiques ne peuvent pas être initialisés

Extension du principe ci-dessus , l'initialisation en classe n'est pas non plus autorisée pour les tableaux statiques, même pour les tableaux constants comme c. Semblables aux membres statiques, les tableaux statiques nécessitent une définition unique pour maintenir la cohérence entre toutes les instances de la classe. Étant donné que l'initialiseur fait partie de la déclaration, cela entraînerait plusieurs définitions s'il était tenté au sein de la classe.

Option de solution de contournement : l'astuce Enum

Pour contourner cette restriction d'initialisation pour les tableaux dans les déclarations de classe, le "Enum Trick" peut être utilisé. Cela implique de définir une énumération avec la taille de tableau souhaitée et de l'utiliser ensuite comme index pour le tableau.

Implications de la limitation de la norme

La limitation susmentionnée imposée par la norme C a plusieurs implications :

  • Favorise la clarté et la cohérence en garantissant que tous les membres et tableaux statiques ont un nom unique et sans ambiguïté. définition.
  • Empêche les conflits potentiels résultant de plusieurs définitions d'entités statiques.
  • Permet aux compilateurs d'optimiser les intégrales constantes statiques car elles peuvent être résolues lors de la compilation, améliorant ainsi l'efficacité du code.

Relaxation en C 11

Dans les révisions ultérieures du langage, à savoir C 11, la restriction sur l'initialisation des données statiques Les députés ont été quelque peu assouplis. Les données membres statiques de « type littéral const » peuvent désormais être initialisées dans la déclaration de classe. Le "type littéral" fait référence à des types primitifs comme int et char sans sémantique définie par l'utilisateur.

Cependant, les tableaux statiques ne peuvent toujours pas être initialisés dans la déclaration de classe, soulignant la nécessité d'une définition unique en dehors de la classe. .

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