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;
}
contre
int Square(int i)
{
return i * i;
}
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ées statiques de fichier.
En quoi sont-ils différents d'avoir des fonctions globales dans un fichier?
Ils sont invisibles pour l'éditeur de liens, permettant à d'autres unités de compilation de définir des fonctions avec la même signature. L'utilisation d'espaces de noms atténue ce problème dans une large mesure, mais les fonctions de fichier -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 nités de traduction ). Il rend la fonction "privée" à l'unité de traduction actuelle. Cela revient à encapsuler la fonction dans un espace de noms anonyme.
namespace {
int Square(int i)
{
return i * i;
}
}
En règle générale, l'utilisation d'un espace de noms anonyme est la méthode C++ préférée 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, la liaison. static
les fonctions ont un lien interne, c'est-à-dire qu'elles ne sont pas visibles en dehors de leur unité de traduction.