constexpr specifier (since C23)
Un objet scalaire déclaré avec le constexpr spécificateur de classe de stockage est une constante . Il doit être entièrement et explicitement initialisé conformément aux règles d'initialisation statique. Il conserve la liaison appropriée à sa déclaration et existe au moment de l'exécution pour que son adresse puisse être prise ; il ne peut simplement pas être modifié au moment de l'exécution de quelque manière que ce soit, c'est-à-dire que le compilateur peut utiliser sa connaissance de la valeur fixe de l'objet dans toute autre expression constante .
De plus, l'expression constante utilisée pour l'initialiseur d'une telle constante est vérifiée au moment de la compilation.
Un initialiseur de type virgule flottante doit être évalué avec l'environnement de virgule flottante au moment de la traduction.
Il existe certaines restrictions sur le type d'objet pouvant être déclaré avec constexpr . À savoir, les constructions suivantes ne peuvent pas être constexpr :
- Pointeurs (sauf que les pointeurs nuls peuvent être constexpr ),
- Types modifiables de façon variable,
- Types atomiques ,
-
volatiletypes, -
restrictpointeurs.
Table des matières |
Mots-clés
Exemple
#include <fenv.h> #include <stdio.h> int main(void) { constexpr float f = 23.0f; constexpr float g = 33.0f; fesetround(FE_TOWARDZERO); constexpr float h = f / g; // n'est pas affecté par fesetround() ci-dessus printf("%f\n", h); }
Sortie :
0.696969
Références
- Norme C23 (ISO/IEC 9899:2024):
-
- 6.7.2 Spécificateurs de classe de stockage (p: 98-103)
Voir aussi
|
Documentation C++
pour
constexpr
spécificateur de type
|