Skip to content

Const Correctness

La parola chiave const (abbreviazione di “constant”) in C++ ha un significato preciso: “Prometto solennemente di non apportare modifiche”.

È un meccanismo di sicurezza potente che previene le alterazioni accidentali dello stato del programma. Usata nel modo giusto, const è tra le feature del linguaggio più forti per eliminare intere categorie di errori a tempo di compilazione, ovvero prima che il programma possa persino girare. L’uso disciplinato di const viene comunemente chiamato Const Correctness.

Se dichiariamo un argomento di una funzione come const, stiamo impedendo al corpo di quella funzione di modificarlo. Combinare const e le reference fornisce un meccanismo altamente performante per passare oggetti grandi a una funzione in modalità “sola lettura” (read-only).

void petruchio(const char* shrew) {
// Errore del compilatore!
// shrew[0] = 'K';
}

Nessun dato viene copiato (perché passiamo un puntatore o reference), ma ci tuteliamo che il dato originale non verrà manomesso.

Mentre i metodi normali possono alterare le variabili interne dell’oggetto che li ha invocati, un metodo const comunica esplicitamente che esso promette di non modificare lo stato dell’oggetto corrente. Sono, in breve, metodi di sola lettura.

Per dichiarare un metodo come const, posiziona la parola chiave const alla fine della dichiarazione dei parametri, prima del corpo del metodo.

Un oggetto il cui accesso passa per una referenza (o puntatore) a const può richiamare esclusivamente i metodi a loro volta marchiati come const. In caso contrario, il compilatore non si fida, sapendo che i metodi “normali” potrebbero infrangere la promessa di sola lettura.

Puoi marcare le variabili membro con const all’interno della definizione della struct/classe. Una variabile membro const non può in alcun caso subire assegnazioni successive. Pertanto, deve per forza essere inizializzata non appena l’oggetto viene costruito.