En gros �a plante !!! Et c'est mieux que d'avoir un bug presque introuvable � 3 jours d'une livraison (parce que le programme ne commence � planter que 3 jours avant la livraison :aie: )...
Version imprimable
En fait, le passage d'un argument sous une forme constante permet de dire "attention, on ne peut absolument pas aller modifier l'�tat de cet argument". C'est ce que l'on appelle "imposer un invariant".
Ca, c'est quelque chose que le compilateur est en mesure de comprendre, et qu'il est en mesure de faire respecter. Comment :question: En s'assurant que toutes les fonctions qui utiliseront l'argument ne sera pas modifi�.
C'est � dire qu'il pourra v�rifier que tu n'essaye pas de transmettre l'argument � une fonction qui le prendrait sous la forme d'une r�f�rence non constante (car les modifications seraient report�es � ton argument) et que tu n'appelle que des fonctions qui se sont engag�es � ne pas modifier l'�tat de ton argument (les fonctions membres d�clar�es constantes).
Car, si tu essayes de transmettre un argument constant � une fonction qui prend la forme non constante, le compilateur se plaindra qu'il ne peux pas convertir un const TonType & en un TonType et que, pour les fonctions membres qui ne sont pas d�clar�es constantes, il se plaindra que tu utilises un "this constant". Quoi qu'il en soit, le compilateur refusera automatiquement que tu utilises ton argument constant avec n'importe quelle fonction pour laquelle "il y a risque qu'il soit modifi�". Avec une telle garantie, tu t'assures que les seules modifications qui surviennent � tes diff�rents objets sont des modifications qui ont �t� clairement voulues (ou, � tout le moins qui surviennent dans un contexte dans lequel la modification de ton objet a bel et bien �t� envisag�e) ;).
Et comme le compilateur sera toujours plus t�tu que toi, tu feras en sorte de le satisfaire, si tu veux que ton programme compile :D
Deux remarques/questions sur ce sujets
* Je crois que const n'est pas une garantie suffisante que l'objet ne soit en aucun cas modifi� (soit par le biais d'un const_cast, soit par un d�bordement de pointeurs) bon, le premier cas devrait �tre rare et control�, le second est g�n�ralement le signe d'un programme qui a un comportement non d�terministe. est
* J'ai toujours crus, que const �tait aussi un indice donn� au compilateur pour faire des optimisations (car il sait que telle variable ne sera pas modifi�), or personne n'en parle ici. qu'en est il en vrai. ?
Il est clair que le mot cl� const ne peut donner une garantie que sur ce qui est "correctement" cod�/programm�.
Si le d�veloppeur fait une connerie et tente d'acc�der � une adresse m�moire � laquelle il n'aurait jamais du tenter d'acc�der, ll est �vident que rien ni personne ne pourra le sauver. Le seul moyen pour r�soudre le probl�me passera par une longue et fastidieuse s�ance de d�bogage :aie:.
Le langage et le compilateur sont des alli�s de choix quand il s'agit d'appliquer une logique correcte, mais ne peuvent effectivement rien pour nous si l'on fait des conneries de conception ;)
Oui, c'est tout � fait vrai.Citation:
* J'ai toujours crus, que const �tait aussi un indice donn� au compilateur pour faire des optimisations (car il sait que telle variable ne sera pas modifi�), or personne n'en parle ici. qu'en est il en vrai. ?
Il est, par exemple, tout � fait en mesure d'�valuer des expressions math�matiques simples ( A =(X+Y)*Z, par exemple) et d�finir directement le r�sultat de l'expression comme valeur pour A si A, X, Y et Z sont constants.
Ainsi, si X vaut 2, Y vaut 3 et Z vaut 4, la valeur de A sera directement d�finie "en dur" � 20 car cela correspond bel et bien au r�sultat de l'expression indiqu�e. Notes d'ailleurs que ce n'est qu'un des exemples les plus simples d'optimisation dont le compilateur est capable ;)
Ceci dit, si on n'a pas parl� de cet avantage, c'est "simplement" parce que l'int�r�t de la chose n'est pas primordial lorsqu'il s'agit d'expliquer simplement le b�n�fice que l'on retire � respecter la const-correctness. C'est la "cerise sur le g�teau" :D
C�est plus ou moins vrai, en fait. De nos jours, les compilateurs n�utilisent plus l�indication const pour leurs optimisations, mais d�terminent eux-m�me si la valeur change (comme il faut le faire de toute mani�re � cause de const_cast, autant l�appliquer � toutes les variables).Citation:
Il est, par exemple, tout � fait en mesure d'�valuer des expressions math�matiques simples ( A =(X+Y)*Z, par exemple) et d�finir directement le r�sultat de l'expression comme valeur pour A si A, X, Y et Z sont constants.
En revanche, c++11 a introduit constexpr, qui lui te garantit que l�expression sera �valu�e (et donc, optimis�e) � la compilation.