const_cast vs reinterpret_cast

Se référant à la C++ FAQ Quand doit-static_cast, dynamic_cast et reinterpret_cast être utilisé?.

const_cast est utilisé pour supprimer ou ajouter des const à une variable et c'est le seul fiable, de définition et de manière légale pour supprimer le constness.
reinterpret_cast est utilisé pour modifier l'interprétation d'un type.

Je comprends, d'une manière raisonnable, pourquoi une variable const doit être commentée à la non-const uniquement à l'aide de const_cast, mais je ne peux pas trouver une justification raisonnable de problèmes à l'aide de reinterpret_cast au lieu de const_cast pour ajouter constness.

Je comprends que l'utilisation de reinterpret_cast de même l'ajout de constness n'est pas sain d'esprit, mais serait-il un UB ou bombe à retardement potentielle pour l'utilisation de reinterpret_cast pour ajouter constness?

La raison qui m'a confondu ici est à cause de la déclaration

En grande partie, la seule garantie que vous obtenez avec reinterpret_cast, c'est que si
vous lancez le résultat en arrière à l'original, vous obtiendrez exactement
même valeur.

Donc si j'ajoute constness à l'aide de reinterpret_cast et si vous reinterpret_cast le résultat en arrière à l'original, il devrait en résulter un retour pour le type d'original et ne doit pas être UB, mais qui ne respecte pas le fait que l'on ne devrait utiliser const_cast pour supprimer le constness

Sur une Note séparée, la norme garantit que Vous pouvez ajouter Constness à l'aide de réinterpréter le cas

5.2.10 Réinterpréter cast (7) ......Lorsqu'un prvalue v de type “pointeur vers T1” est converti dans le type “pointeur vers cv T2”, le résultat est
static_cast(static_cast(v)) si T1 et T2 sont
standard-types de mise en page (3.9) et l'alignement des exigences de T2 sont
pas plus strictes que celles de T1........

  • Pouvez-vous svp me référer à la double question que répond ce?
  • const_cast couvre également l'ajout et de la suppression de volatile.
  • Oui certainement, mais mon objectif actuel est seulement constness
  • Cette déclaration doit se lire "...si vous reinterpret_cast le résultat en arrière à l'original de type..."
InformationsquelleAutor Abhijit | 2013-01-11