Maison >développement back-end >C++ >Pourquoi l'initialisation des variables membres statiques en C doit-elle se produire en dehors de la classe ?
Variables membres statiques en C : initialisation en dehors de la classe
Bien que cela puisse sembler contre-intuitif, l'initialisation des variables membres statiques en C se produit en dehors la classe pour plusieurs raisons logiques.
Règle de définition unique Conformité
Les membres statiques doivent être définis dans exactement une unité de traduction, en respectant la règle de définition unique. Si l'initialisation était autorisée au sein de la classe, cela conduirait à plusieurs définitions de la même variable dans différentes unités de traduction, violant ainsi cette règle.
Exemple :
Considérez ce qui suit extrait de code :
struct Gizmo { static string name = "Foo"; // Not allowed };
Si cette initialisation était autorisée, le nom de la variable serait défini dans chaque unité de traduction incluant le fichier d'en-tête, violer la règle de définition unique.
Autoriser l'initialisation en classe
Bien qu'autoriser l'initialisation au sein de la classe puisse sembler plus intuitif, cela nécessiterait néanmoins une définition distincte pour garantir que la règle de définition unique est appliquée. Ainsi, autoriser l'initialisation en classe ne ferait qu'ajouter de la syntaxe sans apporter de réel avantage.
Alternative pour les valeurs intégrales
Pour les membres statiques intégraux, C permet l'initialisation dans la déclaration si l'expression est :
Cela permet un raccourci syntaxique qui facilite la définition de membres statiques intégraux avec une seule ligne de code. Cependant, une définition dans une unité de traduction distincte est toujours requise.
Exemple :
struct Gizmo { static const int count = 42; // Allowed };
Dans ce cas, le compilateur génère la définition nécessaire en dehors de la classe pour se conformer à la règle d'une définition unique.
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!