Il est possible de modifier les valeurs ainsi que quelqu'un élaborerait donc des moyens possibles de modifier une valeur La valeur constante code> est souvent utilisée dans la programmation. Il donne la sécurité du programmeur que la valeur ne changera pas à l'avenir. Malheureusement, cela n'est pas pleinement appliqué. En conséquence, cela provoque parfois des bugs subtils qui sont très difficiles à déchiffrer. À titre d'exemple:
const code> d'une autre manière également; Certains d'entre eux sont assez complexes et nécessitent une bonne quantité de code qui se perd souvent dans un autre segment du code et provoque donc un bug. p>
Const / code>? Ne vous inquiétez pas si vous ne savez pas tout, beaucoup ne le feraient pas (y compris moi-même). Dites simplement à toutes les façons que vous connaissez - après tout, vous ne pouvez donner que ce que vous avez! P> p>
6 Réponses :
void f(const int& b) { ... } ... int a = ...; f(a); a = ...;
Vous devez d'abord utiliser un Utilisation de l'espace de noms STD; P> Const code>
Variable code> en tant que pointeur code>, puis utilisation de
const_cast
10
10
Il est impossible de modifier les valeurs de const sans causer un comportement non défini. P>
Le compilateur n'essaie pas de déterminer la différence pour vous entre les valeurs de const et non Const. Il vous repose sur vous, le programmeur, pour l'informer via le système de type. noms em> est constitué ou non constitue et le compilateur impose la constance sur le nom em>, pas la valeur. P>
Il y a des moments où il semble que vous puissiez modifier une valeur de const, par exemple lorsque cette valeur a une référence à une autre valeur et modifie cela. La première intuition dit que ces cas ne devraient pas se comporter de cette façon, mais une fois que vous comprenez vraiment et considérez la constance, vous constatez que c'est assez cohérent. P>
Oui, const_cast peut être utilisé pour supprimer l'effet du mot-clé 'const' (mais pas toujours). Par exemple: référence: http: // fr .cppreference.com / w / cpp / langue / const_cast p> p>
int a=1; const int *b=&a; a=3; cout<<(*b); return 0;
int k = 0; const int *l = &k; cout<<*l; // 0 k=1; cout<<*l; // 1 Here I declare only one variable as constant i.e. l. So the variable l can't be changed anymore. And I assign l to the address of k;But now I can change the value of k anywhere, and that will reflect in l because they share the same memory.
a = 3 code> n'est pas un mensonge car
a code> est non-const.
const_cast (b) = 3; code> serait un mensonge.
B code> n'a pas promis que la valeur ne changera pas. Ce qui est appliqué, c'est que vous ne pouvez pas modifier la valeur en utilisant directement la référence
const code>. Je pense que c'est une question intéressante, mais votre exemple n'est définitivement pas le meilleur
mais cet exemple n'est-ce pas faux que vous faites
b code> const non
a code> si vous avez fait
b = 3 code> alors il ne parviendrait pas à compiler
BTW, il serait plutôt étrange si un non-const
int code> ne serait pas autorisé à modifier sa valeur, simplement parce que vous avez effectué une référence
const code> à celle-ci. C'est comme supposer que les gens ne sont pas autorisés à se développer, simplement parce que la hauteur donnée dans leur passeport ne change pas. Eh bien pas la meilleure analogie mais assez proche;)
@ Tobi303 C'était une bonne bonne analogie. Je sais que mon exemple n'est pas le meilleur, peut-être pas même bon. Le point est que la valeur du
B code> a changé B>. Cela a fait l'hypothèse
B code> ne changera pas invalide. Je sais que j'ai abusé d'une échappatoire de mauvaise manière. Cela a en effet causé un bogue subtil
Quel est le but de cette question réellement? Si pour la discussion, c'est le mauvais endroit
B code> n'est pas
const code>! C'est une référence en lecture seule.
@Tuple_cat Il suit la limitation de
const code> que vous ne pouvez pas le modifier à l'aide de la référence directe. Essayez par exemple -
b = 0; code>
Oui. C'est ce que signifie la lecture seule.