CASTS ET const_cast

Salut ce forum apprends les bases du c++

Moderator: Rick

Post Reply
Hydraxx
Site Admin
Posts: 114
Joined: Mon Jan 12, 2026 4:04 pm
Location: France
Contact:

CASTS ET const_cast

Post by Hydraxx »

CASTS ET const_cast

À QUOI ÇA SERT ?

Une conversion change la manière dont une valeur ou une adresse est vue par le système de types.

C++ préfère des casts spécialisés plutôt qu’un cast C générique.


1. static_cast


Conversions ordinaires connues du compilateur.

Code: Select all

double d{3.14};
int x = static_cast<int>(d);
Tu exprimes explicitement :

"Je sais que je perds la partie décimale."


2. reinterpret_cast


Pour des conversions de représentation bas niveau.

Exemple :

Code: Select all

std::uintptr_t address =
    reinterpret_cast<std::uintptr_t>(ptr);
À utiliser avec prudence.


3. const_cast


Permet d’ajouter ou retirer const.

Code: Select all

const int* p = &value;
int* writable = const_cast<int*>(p);

4. QUAND C’EST DANGEREUX

Code: Select all

const int x{42};

int* p = const_cast<int*>(&x);

*p = 10;
x était réellement const.

Modifier sa mémoire par ce chemin donne un comportement indéfini.


5. CAS POSSIBLE

Code: Select all

int x{42};
const int* p{&x};
x n’est pas réellement const.

Il est seulement vu comme const à travers p.

Retirer const puis modifier x peut être valide :

Code: Select all

int* writable = const_cast<int*>(p);
*writable = 10;

6. POURQUOI const_cast EXISTE


Principalement pour :
  • interopérabilité avec du vieux code ;
  • API historiques mal déclarées ;
  • certains cas génériques avancés.
Il ne doit pas devenir une habitude.


À RETENIR


Un cast explicite dit :

"Je demande volontairement au compilateur une conversion."

En bas niveau, cela peut être nécessaire, mais chaque cast doit avoir une raison précise.

Return to “Bases du C++”

Who is online

Users browsing this forum: No registered users and 1 guest