const correctness
const documenta cosa non verrà modificato e blocca scritture accidentali.
Che cos’è const correctness?
const documenta cosa non verrà modificato e blocca scritture accidentali.
Esprimi dati read-only e puntatori modificabili.
Punti importanti
- Ogni puntatore deve riferirsi a un oggetto vivo compatibile o essere null.
- Ogni allocation posseduta va liberata una sola volta.
- Esprimi chiaramente ownership e const.
Esempi di codice C e C++
main.c
#include <stdio.h>
int sum(const int *values, size_t count) {
int total = 0;
for (size_t i = 0; i < count; ++i) total += values[i];
return total;
}
int main(void) {
const int values[] = {2, 4, 6};
printf("%d\n", sum(values, 3));
return 0;
}
12
C++
main.cpp
#include <array>
#include <iostream>
int sum(const std::array<int, 3>& values) {
int total = 0;
for (int value : values) total += value;
return total;
}
int main() {
const std::array values{2, 4, 6};
std::cout << sum(values) << '\n';
}
12
Confronto tra C e C++
Pointer-to-const protegge il valore; un const pointer non cambia indirizzo. C++ aggiunge const member function.
C
Ownership e cleanup sono convenzioni manuali.
C++
Container e RAII codificano ownership e cleanup nel lifetime.
Esercizi pratici
Esegui entrambe le versioni e modificale per osservare le diverse garanzie.
- Testa null e fallimenti di allocation.
- Usa AddressSanitizer e UndefinedBehaviorSanitizer.
- Documenta ownership di ogni puntatore.