Salta ai contenuti
Manuale LogoManuale Logo

Costanti

Se il programma usa il numero pi greco in dieci punti, una modifica alla precisione richiederebbe dieci cambiamenti.

Anche un valore come 18, ripetuto senza spiegazione, non dice se rappresenta un’età minima, un limite o altro.

Le costanti risolvono entrambi i problemi: assegni un nome al valore e lo definisci una sola volta.

Scrivi const prima del tipo per rendere una variabile costante. Una volta assegnato il valore, non può più essere cambiato.

const double PI = 3.14159265358979;
const int ORE_PER_GIORNO = 24;
const int ETA_MINIMA = 18;

Se provi a modificare una costante, il compilatore ti blocca con un errore:

const int MAX = 100;
MAX = 200; // ERRORE: non puoi modificare una costante

Il compilatore impedisce così le modifiche accidentali.

In questa guida scriveremo i nomi delle costanti tutto in maiuscolo, con le parole separate da underscore. È una convenzione, non una regola del linguaggio, e permette di riconoscerle a colpo d’occhio:

const double PI = 3.14159;
const int ETA_MINIMA = 18;
const int MAX_TENTATIVI = 3;
const double VELOCITA_LUCE = 299792458.0;

Il preprocessore del C++ offre anche la direttiva #define, ereditata dal C:

#define PI 3.14159
#define MAX_STUDENTI 30

Con #define, il preprocessore sostituisce ogni occorrenza di PI con 3.14159 prima della compilazione vera e propria. Non crea una variabile con un tipo: esegue una sostituzione di testo.

#include <iostream>
#define PI 3.14159
#define RAGGIO 5
using namespace std;
int main() {
// Il compilatore sostituisce PI con 3.14159 e RAGGIO con 5
double area = PI * RAGGIO * RAGGIO;
cout << "Area: " << area << endl;
return 0;
}

Per i valori costanti, in genere si preferisce const:

Caratteristica const #define
Ha un tipo definito No
Il compilatore la controlla No
Visibile nel debugger No
Rispetta i blocchi di codice No
// Meglio: const ha tipo e viene controllata
const double PI = 3.14159;
// Meno sicuro: #define non ha tipo
#define PI 3.14159

constexpr: costanti calcolate durante la compilazione

Sezione intitolata “constexpr: costanti calcolate durante la compilazione”

In C++ moderno esiste anche constexpr. Si usa per costanti il cui valore può essere calcolato già durante la compilazione (prima ancora che il programma venga eseguito):

constexpr int SECONDI_PER_MINUTO = 60;
constexpr int MINUTI_PER_ORA = 60;
// Il compilatore calcola 60 * 60 = 3600 prima ancora di eseguire il programma
constexpr int SECONDI_PER_ORA = SECONDI_PER_MINUTO * MINUTI_PER_ORA;

Per ora puoi usare tranquillamente const. Imparerai constexpr più avanti.

#include <iostream>
using namespace std;
// Costanti definite una volta sola, usate ovunque nel programma
const double PI = 3.14159265358979;
const double GRAVITA = 9.81; // accelerazione di gravità in m/s²
const int MAX_VOTO = 10;
int main() {
// Calcolo dell'area di un cerchio con raggio 4
double raggio = 4.0;
double area = PI * raggio * raggio;
cout << "Area cerchio (r=" << raggio << "): " << area << endl;
// Calcolo dell'energia potenziale di un oggetto
double massa = 70.0; // kg
double altezza = 5.0; // m
double energia = massa * GRAVITA * altezza;
cout << "Energia potenziale: " << energia << " J" << endl;
// Uso della costante del voto massimo
int voto = 8;
cout << "Voto: " << voto << "/" << MAX_VOTO << endl;
return 0;
}

Output:

Area cerchio (r=4): 50.2655
Energia potenziale: 3434.5 J
Voto: 8/10