Namespaces
Variants

constexpr specifier (since C23)

From cppreference.net

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 :

Table des matières

Mots-clés

constexpr

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