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

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

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-06 03:29:10167parcourir

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

Difficultés à initialiser des membres statiques non const et des tableaux statiques au sein d'une classe

En C, tente d'initialiser des membres statiques non const ou des tableaux statiques directement dans une définition de classe entraînent souvent des erreurs du compilateur. Cet article examine les raisons de ces limitations et présente des solutions de contournement pour obtenir la fonctionnalité souhaitée.

Pourquoi ne puis-je pas initialiser les membres de données statiques en classe ?

Selon la norme C, les membres de données statiques peuvent ne doivent être initialisés dans la définition de classe que s'ils sont de type const intégral ou énumération. Cette restriction garantit les éléments suivants :

  • Définitions uniques : Les définitions de classe sont généralement incluses dans les fichiers d'en-tête, qui peuvent être incorporés dans plusieurs unités de traduction. Pour éviter les définitions d'objets en double, C exige que chaque objet ait une définition unique. L'initialisation en classe d'objets nécessitant un stockage en mémoire violerait cette règle.

Pourquoi seuls les types intégraux et les énumérations const statiques sont-ils autorisés à l'initialisation en classe ?

  • Stockage d'objets : Les membres intégraux statiques const sont traités comme des constantes de compilation et peuvent être optimisés par le compilateur. En autorisant leur initialisation en classe, le compilateur peut éliminer le besoin de les stocker en mémoire, contournant ainsi la restriction susmentionnée.
  • Applicabilité : Les énumérations sont autorisées à effectuer cette initialisation en classe car leur les valeurs peuvent être directement utilisées à la place des entiers.

Que diriez-vous des tableaux statiques dans class?

L'initialisation en classe des tableaux statiques est interdite pour les mêmes raisons qui s'appliquent aux membres statiques non const. De plus, même l'initialisation de tableaux const statiques en classe n'est pas autorisée car :

  • Consttance limitée : Les tableaux const statiques ne sont constants qu'en ce qui concerne leurs éléments, pas leur taille. Cela signifie que le compilateur ne peut pas les traiter comme des constantes de compilation et les optimiser efficacement.

Solutions de contournement

Pour initialiser des tableaux statiques ou des membres non const dans une classe, les techniques suivantes peuvent être employé :

  • Enum Trick : Utilisez une énumération avec des constantes définies pour la taille du tableau et éléments.
  • Définition hors classe : Définissez la variable statique en dehors de la définition de classe dans une portée d'espace de noms, permettant à la fois les membres statiques non const et l'initialisation d'un tableau statique.

C 11 Evolution

C 11 assouplit la restriction en permettant l'initialisation de données membres non statiques dans les déclarations de classe et le initialisation des membres littéraux const statiques avec des expressions constantes. Cependant, ces fonctionnalités peuvent ne pas encore être prises en charge par tous les compilateurs.

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!

Déclaration:
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