C++ fonction locale statique vs fonction globale
Quelle est l'utilité d'avoir des fonctions statiques dans un fichier ?
En quoi sont-ils différents d'avoir des fonctions globales dans un fichier ?
static int Square(int i)
{
return i * i;
}
Vs
int Square(int i)
{
return i * i;
}
4 réponses
Quelle est l'utilité d'avoir des fonctions statiques dans un fichier?
Vous pouvez utiliser ces fonctions pour fournir une logique d'implémentation partagée à d'autres fonctions dans le même fichier. Diverses fonctions d'assistance spécifiques à un fichier sont de bons candidats pour être déclaré fichier statique.
En quoi sont-ils différents d'avoir des fonctions globales dans un fichier?
Ils sont invisibles à l'éditeur de liens, permettant à d'autres unités de compilation de définir des fonctions avec le même signature. L'utilisation d'espaces de noms atténue ce problème dans une large mesure, mais les fonctions file-static
sont antérieures aux espaces de noms, car elles sont une fonctionnalité héritée du langage de programmation C.
Une Fonction static
signifie simplement que l'éditeur de liens ne peut pas exporter la fonction (c'est-à-dire la rendre visible aux autres unités de traduction ). Il rend la fonction "privée" à l'Unité de traduction actuelle. C'est la même chose que d'envelopper la fonction dans un espace de noms anonyme.
namespace {
int Square(int i)
{
return i * i;
}
}
Généralement, l'utilisation d'un espace de noms anonyme est le Moyen C++ préféré pour y parvenir, au lieu d'utiliser le mot clé static
.
Les fonctions statiques sont visibles sur le fichier où elles ont été définies uniquement. Vous ne pouvez pas vous y référer en dehors de ce fichier particulier.
En un mot, lien. Les fonctions static
ont un lien interne, c'est-à-dire qu'elles ne sont pas visibles en dehors de leur unité de traduction.