Ceci est plus d'une question académique puisque je sais d'éviter généralement const_cast
.Est-il possible d'utiliser const_cast sur un tableau pour changer des éléments?
Mais je travaillais sur l'exercice dans le chapitre 3, n ° 27 de la pensée en C++, vol. 1.
Créer un tableau const de double et un tableau de volatiles double. Indexez et utilisez const_cast pour convertir chaque élément en non-const et non-volatile, respectivement, et affecter une valeur à chaque élément .
Je vois comment const_cast
vars unique:
const int i = 0;
int* j = const_cast<int*>(&i);
*j = 1; // compiles and runs
mais ne peut pas comprendre comment le faire fonctionner avec un tableau. La compilation suivante, mais lève une exception «mauvais accès», comme si const
est toujours là.
const int sz = 10;
const double cd[sz] {0,1,2,3,4,5,6,7,8,9};
volatile double vd[sz] {0,1,2,3,4,5,6,7,8,9};
double* cdp = const_cast<double*>(cd);
double* vdp = const_cast<double*>(vd);
cdp[0] = 99; // bad access error
Où est-ce que je me suis trompé?
Vous ne pouvez pas modifier quelque chose qui est const. mentir au compilateur ne fait pas que travailler. – NathanOliver
Vos deux exemples présentent un comportement indéfini. "Compile et exécute" est une manifestation possible d'un comportement indéfini; "erreur d'accès incorrect" en est une autre. Voir aussi: [démons nasaux] (http://www.catb.org/jargon/html/N/nasal-demons.html). Un livre qui suggère que c'est une bonne idée d'écrire du code présentant UB est, dirons-nous, pas un très bon livre pour étudier le C++. –
'* j = 1; // compiles et runs' .. mais qu'est-ce que 'cout << i' et' cout << * j' impriment? – txtechhelp