Maison >développement back-end >C++ >Pourquoi les membres de données statiques C doivent-ils être définis en dehors de la classe ?

Pourquoi les membres de données statiques C doivent-ils être définis en dehors de la classe ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-10 09:40:11529parcourir

Why Must C   Static Data Members Be Defined Outside the Class?

La nécessité de définir des données membres statiques en dehors des classes

Dans le domaine du C, un membre de données statique réside dans une classe mais transcende ses frontières, nécessitant une définition à l'extérieur la classe elle-même. Comme l'affirme le centre de connaissances C d'IBM, "La déclaration d'un membre de données statiques dans la liste des membres d'une classe n'est pas une définition... [elle] doit définir le membre statique en dehors de la déclaration de classe, dans la portée de l'espace de noms." Pourquoi cette règle est-elle appliquée ? Quelles considérations sous-jacentes en matière d'allocation de mémoire nécessitent cette pratique ?

Le précepte derrière ce mandat réside dans la « règle de définition unique » fondamentale du langage. Cette règle stipule que tous les objets statiques utilisés dans un programme doivent porter précisément une et une seule définition. Les définitions de classe, généralement hébergées dans des fichiers d'en-tête, sont fréquemment incorporées dans plusieurs unités de traduction (fichiers sources). Si la déclaration de l'objet statique était placée dans l'en-tête, chaque unité incluse entraînerait une définition distincte, contrevenant directement à la règle d'une définition.

Pour contourner ce risque, les définitions de classe dans les en-têtes déclarent simplement les données membres statiques sans les définir. . Cela oblige le programmeur à fournir une définition explicite ailleurs. Bien qu'il soit théoriquement possible pour le langage de consolider plusieurs définitions en une seule, comme c'est le cas avec les fonctions en ligne, ce n'est pas le cas des données membres statiques. Ainsi, nous nous retrouvons avec l'exigence du langage en matière de définition externe des données membres statiques.

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