Les constantes
Historiquement, les constantes en C étaient déclarées avec la pseudo-instruction
#define
du préprocesseur. Par exemple #define MAX_INT 65535
. Le préprocesseur
fera une substitution textuelle et remplacera simplement toutes les occurrences de
MAX_INT
par 65535
. Le principal défaut de cette construction, c’est que la
constante n’a pas de type et que la substitution textuelle peut être la source
d’erreur difficile à trouver. Considérez l’exemple suivant :
#define MY_CONSTANT 12 + 4
int x = MY_CONSTANT * 2;
On pourrait croire que MY_CONSTANT
vaut 16 et que MY_CONSTANT * 2
vaut donc 32, mais
comme le préprocesseur fait une substitution textuelle, l’assignation à la
variable x
devient int x = 12 + 4 * 2;
et x
vaut donc 20 et non 32!
Si vous devez vraiment utiliser le préprocesseur et la pseudo-instruction #define
,
assurez-vous alors d’entourer les expressions de parenthèses (par exemple #define MY_CONSTANT (12 + 4)
).
Avec le C++, nous pouvons déclarer des constantes avec les modificateurs const
ou constexpr
:
constexpr int32_t kMyConstant = 12 + 4;
le modificateur const
est l’équivalent du final
de Java et indique que la
valeur assignée ne changera pas. Cette valeur peut éventuellement n’être
connue que lors de l’exécution du programme (“run-time”).
Le modificateur constexpr
indique que la valeur est calculée lors de la compilation.
La constante kMyConstant
a un type précis et on obtient le résultat attendu si on
la multiplie par une autre valeur. Le préfixe k
dans le nom de la variable est
une pratique tirée du “Google C++ Style Guide”.