0Pricing
C++ Academy · Leçon

consteval et constinit

Découvrir les mots-clés modernes liés à la compilation

consteval et constinit est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C++ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C++ Academy comprend 4 leçons au total.

Au-delà de constexpr

C++20 ajoute deux mots-clés qui renforcent la programmation à la compilation : consteval pour les fonctions dont l'évaluation à la compilation est garantie, et constinit pour une initialisation à la compilation garantie.

consteval : fonctions immédiates

Une fonction consteval doit être évaluée à la compilation. Contrairement à constexpr, elle ne peut jamais s'exécuter à l'exécution.

consteval int cube(int x) {
    return x * x * x;
}

int main() {
    constexpr int c = cube(3);   // OK: compile time
    return c;
}

consteval rejette les appels à l'exécution

Appeler une fonction consteval avec une valeur connue seulement à l'exécution est une erreur de compilation — la garantie est imposée.

consteval int cube(int x) { return x * x * x; }

int main() {
    int n = 4;
    // int bad = cube(n);   // ERROR: n is not a constant
    return cube(2);
}

Pourquoi utiliser consteval ?

Utilisez-le lorsqu'un calcul n'a aucun sens à l'exécution — par exemple pour générer une table constante ou valider un littéral à la compilation.

constexpr et consteval

Les fonctions constexpr peuvent s'exécuter à la compilation ; les fonctions consteval le font toujours. Choisissez consteval pour interdire toute utilisation accidentelle à l'exécution.

constinit : initialisation statique garantie

constinit garantit qu'une variable statique ou locale à un fil d'exécution est initialisée à la compilation, ce qui élimine le fiasco de l'ordre d'initialisation statique.

constinit int globalCount = 10;   // initialized at compile time

int main() {
    return globalCount;
}

constinit n'est pas const

Contrairement à constexpr, une variable constinit peut encore être modifiée après son initialisation à la compilation — constinit ne limite que la manière dont elle est initialisée.

constinit int counter = 0;

int main() {
    counter = 5;   // OK: constinit allows mutation
    return counter;
}

Résoudre le fiasco de l'ordre d'initialisation

Pour les variables statiques non locales réparties entre plusieurs unités de traduction, constinit impose une initialisation statique (à la compilation), de sorte que la valeur soit prête avant le début de toute initialisation dynamique.

Comparaison des trois mots-clés

constexpr : peut être évalué à la compilation et est const. consteval : doit être évalué à la compilation (pour les fonctions). constinit : impose une initialisation à la compilation, mais reste modifiable.

Prise en charge par le compilateur

Il s'agit de fonctionnalités de C++20. Compilez avec -std=c++20 (ou une version ultérieure) sur GCC/Clang, ou avec /std:c++20 sur MSVC.

Choisir le bon outil

Utilisez consteval pour imposer un calcul à la compilation, et constinit pour rendre l'initialisation statique déterministe — ensemble, ils rendent le C++ à la compilation plus sûr.

Vérification rapide

Vérifiez votre compréhension de consteval et constinit.

Récapitulatif

Vous avez appris les mots-clés de C++20 consteval (fonctions qui doivent s'exécuter à la compilation) et constinit (initialisation à la compilation garantie pour les variables statiques, qui restent modifiables). Avec constexpr, ils offrent un contrôle précis de l'évaluation à la compilation.

Questions Fréquemment Posées

La leçon « consteval et constinit » est-elle gratuite ?

Oui — le texte complet de « consteval et constinit » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C++ Academy, passe à CoddyKit PRO. Le cours C++ Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « consteval et constinit » ?

Découvrir les mots-clés modernes liés à la compilation Tu pratiques C++ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer C++ Academy ?

Aucune expérience préalable n'est requise. C++ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « consteval et constinit » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon C++ Academy ?

Oui. Chaque leçon C++ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Variables et paramètres const
  2. Fonctions membres const
  3. constexpr et évaluation à la compilation
  4. consteval et constinit
← Retour à C++ Academy