bonsoir @rsuinux,
Le mot clé constexpr indique au compilateur qu’une variable (ou fonction) peut déjà être évaluée pendant la compilation et non plus seulement à l’exécution du programme. L’avantage c’est que le compilateur effectue le travail une fois pour toutes, ce qui rend l’exécution du programme plus rapide.
En déclarant des constantes avec constexpr, on les rend utilisables à la compilation :
constexpr float const compensation = 0.021 * 361.0;
constexpr float const compensation { 0.021 * 361.0 };
Le qualificatif constexpr indique que la donnée qualifiée est constante, ce qui permet de l'utiliser dans une expression à résultat constant. Comme dit plus haut, Le compilateur précalcule le résultat à des fins d'optimisation.
En fait les variables déclarées constexpr ont un statut semblable à celui des littéraux (tels que les constantes numériques). Toutefois contrairement aux littéraux, elles résident en mémoire : on peut donc obtenir leur adresse. Elles doivent être des données de types primitifs (int, double, pointeurs ...) ou des agrégats composés de données de types primitifs. Elles peuvent aussi être des objets, à condition que la classe correspondante ait un constructeur également déclaré constexpr.
Implicitement, utiliser constexpr sur une variable revient à la déclarer const, ce qui est logique. Dans le but d'être explicite, on peut préciser également const mais ce n'est pas une obligation :
constexpr int k = 3;
constexpr float compensation = 0.021 * 361.0;
Bonne soirée.