web-dev-qa-db-fra.com

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 at-il une différence entre eux? Quand utiliseriez-vous l’une sur l’autre?

42
Lior

La différence est le lien.

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

Si l'objet 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'objet n'est pas utilisé en dehors de son unité de traduction.

42
ouah

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 en soi.

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.

static en dehors d'une fonction signifie que la portée 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), statique est un spécificateur de stockage et const est un qualificateur de type.

64
Joe

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

#include <stdlib.h>

void my_function() {
  const int foo = Rand();         // Perfectly OK!
  static const int bar = Rand();  // Compile time error.
}

Si vous voulez qu'une variable locale soit "vraiment constante", vous devez la définir non seulement "const" mais "statique const".

0
nibot