À QUOI ÇA SERT ?
const permet de dire au compilateur :
"Cette donnée ne doit pas être modifiée par cette interface."
Cela rend le contrat d’une fonction ou d’un objet beaucoup plus clair.
1. VARIABLE const
Code: Select all
const int x{42};
Code: Select all
x = 100;
2. POINTEUR VERS OBJET const
Code: Select all
const int* ptr{&x};
Code: Select all
ptr = &other;
Code: Select all
*ptr = 10;
L’objet vu à travers lui ne l’est pas.
3. POINTEUR const
Code: Select all
int* const ptr{&x};
L’adresse dans ptr ne peut plus changer.
Mais :
Code: Select all
*ptr = 10;
4. LES DEUX
Code: Select all
const int* const ptr{&x};
L’objet ne peut pas être modifié via ce pointeur.
5. ASTUCE DE LECTURE
Code: Select all
const int* ptr
Code: Select all
int* const ptr
6. PARAMÈTRE PAR RÉFÉRENCE const
Code: Select all
void print(const std::string& text)
{
}
Si tu passes par valeur :
Code: Select all
void print(std::string text)
Avec :
Code: Select all
const std::string&
- évites la copie ;
- interdis la modification ;
- acceptes un objet existant.
7. MÉTHODE const
Code: Select all
class Counter
{
public:
int value() const
{
return value_;
}
private:
int value_{};
};
"Cette méthode ne modifie pas l’état observable de l’objet."
8. POURQUOI C’EST IMPORTANT
Une API bien const-correct permet au compilateur de t’aider.
Exemple :
Code: Select all
void dump(const Buffer& buffer);
C’est une documentation intégrée au système de types.
À RETENIR
const ne sert pas seulement à empêcher une écriture.
Il exprime l’intention.
En code système, cela aide énormément à comprendre :
- qui peut modifier une structure ;
- quel buffer est en lecture seule ;
- quel pointeur change ou non.
