Quelle est la différence entre static const et const?

Quelle est la différence entre static const et const ? Par exemple:

 static const int a=5; const int i=5; 

Y a-t-il une différence entre eux? Quand utiliseriez-vous l’un sur l’autre?

La différence est le lien.

 // At file scope static const int a=5; // internal linkage const int i=5; // external linkage 

Si l’object i n’est pas utilisé en dehors de l’unité de traduction où il est défini, vous devez le déclarer avec le spécificateur static .

Cela permet au compilateur d’effectuer (potentiellement) d’autres optimisations et d’informer le lecteur que l’object n’est pas utilisé en dehors de son unité de traduction.

static détermine la visibilité en dehors d’une fonction ou d’une durée de vie variable à l’intérieur. Donc, cela n’a rien à voir avec const per se.

const signifie que vous ne modifiez pas la valeur après son initialisation.

statique dans une fonction signifie que la variable existera avant et après la fin de la fonction.

statique en dehors d’une fonction signifie que la scope du symbole marqué static est limitée à ce fichier .c et ne peut pas être vue en dehors de celui-ci.

Techniquement (si vous voulez rechercher cela), static est un spécificateur de stockage et const est un qualificateur de type.

Cela dépend si ces définitions sont à l’intérieur d’une fonction ou non. La réponse pour le cas en dehors d’ une fonction est donnée par ouah, ci-dessus. A l’intérieur d’une fonction, l’effet est différent, illustré par l’exemple ci-dessous:

 #include  void my_function() { const int foo = rand(); // Perfectly OK! static const int bar = rand(); // Comstack time error. } 

Si vous voulez qu’une variable locale soit “vraiment constante”, vous devez la définir non seulement “const” mais “static const”.