Maison >développement back-end >C++ >Pourquoi les membres de données statiques doivent-ils être définis en dehors de la déclaration de classe en C ?
Implications sur l'allocation de mémoire des membres de données statiques
Le centre de connaissances IBM C indique que la déclaration d'un membre de données statique dans la liste des membres de classe n'est pas une définition, ce qui nécessite qu'elle soit définie en dehors de la déclaration de classe dans la portée de l'espace de noms. Cela soulève la question de savoir pourquoi cela est nécessaire et quelles sont les implications schématiques concernant l'allocation de mémoire.
Selon la règle de définition unique, chaque objet statique au sein d'un programme doit être défini exactement une fois. Si la déclaration de l'objet statique dans le fichier d'en-tête était une définition, cela entraînerait plusieurs définitions dans les unités de traduction, violant ainsi la règle.
Pour éviter cela, la déclaration dans le fichier d'en-tête n'est pas une définition. Au lieu de cela, une seule définition doit être fournie en dehors de la définition de classe, généralement dans le fichier source de l'unité de traduction principale. Cela garantit que l'objet statique n'est défini qu'une seule fois dans l'ensemble du programme, en respectant la règle de définition unique.
En termes d'allocation de mémoire, les données membres statiques sont allouées dans un segment spécial de mémoire appelé données statiques. segment. Ils ne sont initialisés qu'une seule fois, lors du démarrage du programme, et conservent leurs valeurs tout au long de la durée de vie du programme. Cela contraste avec les données membres non statiques, qui sont allouées dans la pile ou le tas lorsqu'un objet est créé et détruites lorsque l'objet est détruit.
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!