Tout: Ceci est cité à partir d'une édition efficace C ++ 3e EDITION
const_cast est généralement utilisé pour éliminer la constance des objets. C'est le seul casting de style C ++ qui peut faire cela. P> BlockQuote>
Ma question est Const_cast Ajouter une constance à un objet non constitué? En fait, j'ai écrit un petit programme essayant d'approuver ma pensée. P>
xxx pré> omettez l'erreur "&" incursion ci-dessous: p>
Erreur C2440: 'const_cast': impossible de convertir de 'Constest' à 'const Constest' p> blockQuote>
Il montre que const_cast peut ajouter la constance, mais semble que vous devez vous lancer dans une référence d'objet, quelle est la magie de cette référence? P> P>
4 Réponses :
Vous n'avez pas besoin const_cast code> pour ajouter CENDIDATION:
C d = const_c; // Copies const_c
Néanmoins, ajout de const code> parfois i> est une chose utile à faire, car elle permet un code plus concis qu'en ajoutant une variable supplémentaire (référence). Voir la moitié inférieure de cette page: livres.google.de/books?id=MT7E5GDUW_4C&PG= PA188 . Notez que cela peut, comme Sharpooth correctement noté , seulement être utilisé pour lancer dans un
const code> référence i>.
Pourquoi jeter la constance de const_c est indéfini? Et si c'est un type intégré, c'est-à-dire. Char, int, bool, etc.?
Le comportement n'est pas non défini, sauf si vous essayez d'utiliser la référence non-Const pour modifier l'objet Const.
const_cast code> ne peut être utilisé que pour lancer des pointeurs et des références. Il ne peut pas être utilisé pour se lancer vers des objets. Voici pourquoi: Si vous avez un objet Const, vous ne pouvez pas le faire non-const et inversement - c'est déjà Const, vous ne pouvez pas la redéclaré. Vous ne pouvez essayer que d'y accéder via un pointeur ou une référence sans (ou avec) const. P>
const_cast code> ne peut pas modifier la constitution de la valeur. Donc, il renvoie une référence de const à la valeur. P>
const_cast peut également être utilisé pour ajouter la constance.
int *t1 = NULL; // T = int, cv1, 0 = none int * const t2 = const_cast<int * const>(t1); // T = int, cv2, 0 = const
J'ai lu tout à fait quelques livres, aucun d'entre eux n'a jamais mentionné à l'aide de Const_cast pour ajouter la constance à un objet ou à une référence d'objet? Cependant, ce que j'ai rencontré consiste à utiliser static_cast pour atteindre la même chose que introduite en efficace C ++ par Scott Meyers.Ouops, n'a pas pu créer un lien vers le livre Google
@Trachy: wetherdit.wordpress. COM / 2010/05/27 / ... (Vérifier l'élément 9)
Pourquoi utiliseriez-vous const_cast pour ajouter Const? Il suffit d'attribuer l'objet non-const à une variable Const et vous avez terminé. Je n'ai aucune idée de la raison pour laquelle la référence constante fonctionne dans votre cas cependant.
Supposons qu'une fonction de membre possède une substitution de const et de non-const: comment appelez-vous le remplacement de const sur un objet non constitué sans effectuer une copie? (La réponse est
static_cast code>, mais il n'est pas immédiatement effacé à mon pourquoi
const_cast code> ne doit pas aussi fonctionner pour cela)
@Tyler: Vous posez une référence de const, par exemple avec
static_cast code>.
@Alexandre ouais, je sais que c'est comme ça que vous le faites, mais cette question m'a rendu curieux de savoir pourquoi la norme C ++ choisit de ne pas autoriser
const_cast code> à cette fin, car le but logique d'une telle distribution est de modifier la const-ness d'une variable.