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
DDDoriginal
2024-12-03 18:11:23495parcourir

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";
};

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;
};

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;

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