7
votes

Façons de modifier la valeur constante en C ++

La valeur constante 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: xxx

Il est possible de modifier les valeurs const 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.

ainsi que quelqu'un élaborerait donc des moyens possibles de modifier une valeur 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!


9 commentaires

a = 3 n'est pas un mensonge car a est non-const. const_cast (b) = 3; serait un mensonge.


B 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 . 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 const non a si vous avez fait b = 3 alors il ne parviendrait pas à compiler


BTW, il serait plutôt étrange si un non-const int ne serait pas autorisé à modifier sa valeur, simplement parce que vous avez effectué une référence const à 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 a changé . Cela a fait l'hypothèse B 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 n'est pas const ! C'est une référence en lecture seule.


@Tuple_cat Il suit la limitation de const que vous ne pouvez pas le modifier à l'aide de la référence directe. Essayez par exemple - b = 0;


Oui. C'est ce que signifie la lecture seule.


6 Réponses :


9
votes
void f(const int& b) { ... }
...
int a = ...;
f(a);
a = ...;

0 commentaires

1
votes

Vous devez d'abord utiliser un Const code> Variable code> en tant que pointeur code>, puis utilisation de const_cast () Déclaration, comme Bellow:

Utilisation de l'espace de noms STD; P>

10
10


0 commentaires

1
votes

Il est impossible de modifier les valeurs de const sans causer un comportement non défini.

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 est constitué ou non constitue et le compilateur impose la constance sur le nom , pas la valeur.

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.


0 commentaires

2
votes

Oui, const_cast peut être utilisé pour supprimer l'effet du mot-clé 'const' (mais pas toujours). Par exemple: xxx

référence: http: // fr .cppreference.com / w / cpp / langue / const_cast


0 commentaires

2
votes
 int a=1;
   const int *b=&a;
    a=3;
   cout<<(*b);
   return 0;

0 commentaires

1
votes
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.

0 commentaires