173 votes

La sémantique C++ de « static const » vs « const »

En C++ plus précisément, quelles sont les différences sémantiques entre par exemple :

et

pour les deux `` comme un lien et un spécificateur de classe de stockage (c.-à-d. à l’intérieur et à l’extérieur une fonction).

145voto

Ben Voigt Points 151460

À la portée de fichier, pas de différence en C++. const fait une liaison interne par défaut, et toutes les variables globales ont statique de la vie. Mais la première variante a le même comportement dans C, de sorte que peut être une bonne raison de l'utiliser.

Au sein d'une fonction, la deuxième version peut être calculée à partir de paramètres, en C ou en C++ il n'a pas à être une constante de compilation à l'instar de certains autres langues exigent.

Au sein d'une classe, essentiellement la même chose que pour les fonctions, une instance const de la valeur peut être calculée dans le ctor-initialiseur-liste. Un static const est défini lors du démarrage de l'initialisation et reste inchangée pour le reste du programme. (Remarque: le code de static membres est un peu différent parce que la déclaration et l'initialisation sont séparés.)

Rappelez-vous, en C++, const moyen en lecture seule, pas constante. Si vous avez un pointeur-à-const puis d'autres parties du programme peuvent changer la valeur alors que vous n'êtes pas à la recherche. Si la variable a été définie avec const, alors personne ne peut le changer après l'initialisation, mais initialisation peut encore être arbitrairement complexe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X