constexpr e tempo di compilazione
Calcolare valori in fase di compilazione
constexpr e tempo di compilazione è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C++ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C++ Academy include 4 lezioni in totale.
Che cosa significa constexpr
constexpr indica al compilatore che un valore o una funzione può essere valutato in fase di compilazione, producendo una vera costante nota a tempo di compilazione.
#include <iostream>
int main() {
constexpr int size = 4 * 4; // computed at compile time
int arr[size];
std::cout << sizeof(arr) / sizeof(int) << "\n";
}Funzioni constexpr
Una funzione constexpr può essere eseguita in fase di compilazione quando riceve argomenti costanti, e a tempo di esecuzione negli altri casi.
#include <iostream>
constexpr int square(int x) { return x * x; }
int main() {
constexpr int s = square(5); // compile time
int n = 6;
std::cout << s << " " << square(n) << "\n"; // second at runtime
}Costanti a tempo di compilazione negli array
Poiché i valori constexpr sono noti in fase di compilazione, possono determinare la dimensione degli array e fungere da argomenti dei template.
constexpr e const a confronto
const significa "non può cambiare"; constexpr significa "noto a tempo di compilazione". Ogni constexpr è implicitamente const, ma non ogni const è constexpr.
#include <iostream>
int main() {
int x;
std::cin >> x;
const int a = x; // const but runtime value
constexpr int b = 10; // compile-time constant
std::cout << b << "\n";
}constexpr ricorsivo
Le funzioni constexpr possono essere ricorsive, consentendo al compilatore di calcolare valori come i fattoriali prima dell'esecuzione del programma.
#include <iostream>
constexpr long factorial(int n) {
return n <= 1 ? 1 : n * factorial(n - 1);
}
int main() {
constexpr long f = factorial(5); // 120 at compile time
std::cout << f << "\n";
}constexpr più ricco nel C++ moderno
A partire da C++14, le funzioni constexpr possono contenere cicli, variabili locali e rami condizionali, consentendo di calcolare costanti complesse in fase di compilazione.
#include <iostream>
constexpr int sumTo(int n) {
int total = 0;
for (int i = 1; i <= n; ++i) total += i;
return total;
}
int main() {
constexpr int s = sumTo(100);
std::cout << s << "\n";
}Le variabili constexpr devono essere inizializzate in fase di compilazione
Una variabile dichiarata constexpr deve avere un inizializzatore valutabile in fase di compilazione, altrimenti il programma non verrà compilato.
Vantaggi dei calcoli a tempo di compilazione
Calcolare in fase di compilazione significa nessun costo a tempo di esecuzione, valori utilizzabili nei contesti costanti e rilevamento anticipato degli errori.
constexpr e template
I valori constexpr si abbinano naturalmente ai template e a std::array, dove dimensioni e parametri devono essere costanti note a tempo di compilazione.
Quando si passa all'esecuzione
Se una funzione constexpr riceve argomenti non costanti, viene semplicemente eseguita a tempo di esecuzione come una funzione normale: non si verifica alcun errore.
Preferisca constexpr per le costanti
Usi constexpr per le vere costanti, come dimensioni, calcoli matematici e tabelle di ricerca. È più espressivo di const e abilita garanzie a tempo di compilazione.
Verifica rapida
Verifichi la propria comprensione di constexpr.
Riepilogo
Ha imparato che constexpr abilita la valutazione di variabili e funzioni in fase di compilazione, si differenzia da const (che vieta soltanto le modifiche), supporta cicli e ricorsione nel C++ moderno e passa all'esecuzione a tempo di esecuzione quando riceve input non costanti.
Domande Frequenti
La lezione «constexpr e tempo di compilazione» è gratuita?
Sì — il testo completo di «constexpr e tempo di compilazione» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C++ Academy, passa a CoddyKit PRO. Il corso C++ Academy include 4 lezioni in totale.
Cosa imparerò in «constexpr e tempo di compilazione»?
Calcolare valori in fase di compilazione Eserciti C++ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C++ Academy?
Non è richiesta alcuna esperienza precedente. C++ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «constexpr e tempo di compilazione»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C++ Academy?
Sì. Ogni lezione C++ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Variabili e parametri const
- Funzioni membro const
- constexpr e tempo di compilazione
- consteval e constinit