Maison > développement back-end > C++ > Pourquoi les membres statiques et les tableaux non constants ne peuvent-ils pas être initialisés dans une définition de classe C ?

Pourquoi les membres statiques et les tableaux non constants ne peuvent-ils pas être initialisés dans une définition de classe C ?

Mary-Kate Olsen
Libérer: 2024-12-12 21:07:18
original
592 Les gens l'ont consulté

Why Can't Non-Const Static Members and Arrays Be Initialized Within a C   Class Definition?

Pourquoi les membres de données statiques et les tableaux ne peuvent pas être initialisés dans les définitions de classe

Membres statiques non const

La norme C restreint l'initialisation des données statiques membres dans les définitions de classe aux types intégraux ou énumérations constantes statiques uniquement.

class A {
  static const int a = 3;  // Allowed
  static int b = 3;       // Error: Non-const static member cannot be initialized in class definition
  static const int c[2] = {1, 2};  // Allowed
  static int d[2] = {1, 2};       // Error: Non-const static array cannot be initialized in class definition
};
Copier après la connexion

Cette limitation est due à la manière dont Les données membres statiques sont gérées par le compilateur. Chaque membre de données statiques doit avoir une définition unique, et s'il est initialisé dans la définition de classe, il créera plusieurs définitions lorsque la classe est incluse dans plusieurs unités de traduction.

Tableaux statiques

Tableaux statiques, même les tableaux constants ne peuvent pas être initialisés dans les définitions de classe car leur taille ne peut pas être déterminée au moment de la compilation. Le compilateur nécessite que la taille d'un tableau soit connue avant de pouvoir allouer de la mémoire au tableau.

Solution de contournement utilisant "enum Trick"

Pour initialiser des tableaux statiques dans les définitions de classe, une solution de contournement utilisant le Une "astuce enum" peut être utilisée :

class A {
  static const int a = 3;
  enum { arrSize = 2 };
  static const int c[arrSize] = {1, 2};
};
Copier après la connexion

Raisons de conformité standard

La restriction de la norme sur l'initialisation des membres statiques non const découle de la nécessité d'éviter les définitions ambiguës et de garantir des définitions de membres uniques dans les unités de traduction.

En ce qui concerne les tableaux statiques, la conception du langage C a donné la priorité à l'efficacité au moment de la compilation, exigeant la taille du tableau à connaître au moment de la compilation pour optimiser l'allocation de mémoire. Cependant, C 11 a introduit le concept d'expressions constantes, permettant l'initialisation de membres de données const avec des valeurs déterminées au moment de la compilation, ce qui peut offrir plus de flexibilité dans les futures versions C.

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