Maison > développement back-end > C++ > Pourquoi initialiser les variables membres statiques C en dehors de la déclaration de classe ?

Pourquoi initialiser les variables membres statiques C en dehors de la déclaration de classe ?

Barbara Streisand
Libérer: 2024-12-25 15:11:21
original
793 Les gens l'ont consulté

Why Initialize C   Static Member Variables Outside the Class Declaration?

Initialisation des variables membres statiques en C : Pourquoi en dehors de la classe ?

En C, les variables membres statiques sont initialisées en dehors de la déclaration de classe. Cet écart par rapport à l'initialisation en classe, plus intuitive, a suscité la curiosité des développeurs. Y a-t-il une raison logique derrière cette décision de conception ?

La raison fondamentale réside dans l'exigence selon laquelle les membres statiques doivent être définis dans exactement une unité de traduction. Si l'initialisation était autorisée au sein de la classe, elle pourrait conduire à plusieurs définitions de la même variable dans différentes unités de traduction, violant ainsi la règle de définition unique.

Pour illustrer cela, considérons l'exemple suivant :

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

Si ce code était autorisé, le nom serait défini dans chaque unité de traduction qui inclut ce fichier d'en-tête. Cela est en conflit avec la règle de définition unique, qui exige qu'une variable ne puisse avoir qu'une seule définition.

Cependant, C fournit un sucre syntaxique qui permet l'initialisation de membres statiques intégraux dans la déclaration :

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

Ceci est autorisé tant que l'expression est un type intégral const ou énumération, peut être évaluée au moment de la compilation et qu'il existe toujours une définition dans une seule unité de traduction qui ne viole pas la règle d’une définition. 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
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