Maison >développement back-end >C++ >Comment et pourquoi initialisons-nous des membres de données statiques en dehors de la définition de classe ?

Comment et pourquoi initialisons-nous des membres de données statiques en dehors de la définition de classe ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-06 07:30:02870parcourir

How and Why Do We Initialize Static Data Members Outside the Class Definition?

Initialisation et définition des membres de données statiques

Les membres de données statiques, tels que la variable "i" dans le code fourni, nécessitent un traitement spécial lors de l'initialisation. Il est important de comprendre la distinction entre un initialiseur, qui attribue une valeur, et une définition, qui déclare l'existence de la variable.

Initialiseur et définition

Dans l'exemple de code, les données statiques le membre "i" est initialisé en dehors de la définition de la classe. C'est une exigence car une définition doit fournir une adresse en mémoire pour la variable, qui ne peut pas être déterminée dans la définition de classe elle-même.

D'un autre côté, un initialiseur attribue simplement une valeur à la variable sans spécifier son adresse. Cela permet de définir de manière concise une valeur initiale en un seul endroit, évitant ainsi d'avoir à la répéter dans les constructeurs.

Membres de données non statiques

Membres de données non statiques, comme "normalValue " dans l'exemple, existent dans les instances de la classe. Leurs adresses dépendent de l'instance à laquelle ils appartiennent. Par conséquent, des définitions de membres de données non statiques sont créées lors de la création d'instances.

Définitions de membres de données statiques

En revanche, les membres de données statiques ont une adresse fixe et existent indépendamment de toute instance. Pour garantir qu'ils obtiennent une adresse unique, l'éditeur de liens nécessite exactement une définition pour chaque membre de données statiques. Étant donné que les définitions de classe sont généralement incluses dans plusieurs fichiers objets, la définition de membres de données statiques au sein de la classe violerait cette exigence.

Définition en dehors de la classe

Pour résoudre ce problème, les définitions de membres de données statiques doivent être placé en dehors de la déclaration de classe. Cela garantit qu'ils apparaissent dans un seul fichier objet, permettant à l'éditeur de liens d'attribuer une adresse appropriée.

Analogie avec les variables externes

Le concept de définition de données membres statiques en dehors de la classe est similaire à la déclaration variables externes. Une déclaration externe indique que la variable est définie ailleurs dans le programme. De même, les déclarations de données membres statiques dans la définition de classe peuvent être considérées comme des déclarations externes, la définition réelle étant fournie séparément.

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