Maison > développement back-end > C++ > Pourquoi les variables membres statiques C sont-elles initialisées en dehors de la définition de classe ?

Pourquoi les variables membres statiques C sont-elles initialisées en dehors de la définition de classe ?

DDD
Libérer: 2024-12-03 18:11:23
original
481 Les gens l'ont consulté

Why are C   Static Member Variables Initialized Outside the Class Definition?

Initialisation des variables membres statiques en C

En C, les variables membres statiques sont initialisées en dehors de la définition de la classe. Ce choix de conception a soulevé des questions concernant son raisonnement logique et ses implications potentielles en matière d'héritage.

Raison de l'initialisation externe

Les membres statiques doivent être définis dans exactement une unité de traduction pour adhérer la règle d’une définition. Si l'initialisation était autorisée au sein de la classe, plusieurs définitions pourraient apparaître dans différentes unités de traduction où le fichier d'en-tête est inclus.

Exemple

Considérez l'extrait de code suivant :

struct Gizmo
{
  static string name = "Foo";
};
Copier après la connexion

Si le nom devait être initialisé au sein de la classe, il serait défini dans chaque unité de traduction qui inclut le fichier d'en-tête. Cela violerait la règle de définition unique.

Membres statiques intégraux

C permet l'initialisation de membres statiques intégraux dans la déclaration. Cependant, une définition externe est toujours requise au sein d'une seule unité de traduction pour satisfaire à la règle d'une définition. Cela sert de raccourci syntaxique :

struct Gizmo
{
  static const int count = 42;
};
Copier après la connexion

Tant que l'expression utilisée dans l'initialisation est de type const intégral ou énumération, peut être évaluée au moment de la compilation et qu'une définition existe dans une seule unité de traduction, cette approche est valable. Par exemple :

gizmo.cpp

#include "gizmo.h"

const int Gizmo::count;
Copier après la connexion

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal