Salut,
Bon ça fait longtemps que je me tâte sur le sujet mais faut que j'en parle chez dev.com
Qd on m'a appris le C, j'ai pris la bonne habitude de mettre les chaines en parametres de type "entrée" aux fonctions comme ceci :
Je le fais aussi quand je passe un pointeur sur un objet auquel je veux rien modifier, ou bien un pointeur sur le premier element d'un tableau.Code:void func (const char * str);
Si l'utilité du const est ici evidente et souligne clairement le passage de parametre en entrée, on m'a appris aussi a mettre des const aux parametres non pointeur
L'utilité, outre le fait de rajouter du sens au parametre (j'avais assimilé que const = parametre d'entrée), je l'ai comprise assez tard : ça sert en fait à eviter de modifier ces parametres par megardeCode:void func (const int a, const int b);
Ici, j'aurais voulu ecrire (a == 4), et grace au const, le compilateur me dit que je peux pas affecter a.Code:
1
2
3
4
5
6 void func (const int a, const int b) { if (a = 4) return; /*...*/ }
C'est bien, mais j'ai pas l'impression que cette technique soit utilisée par les professionnels du C.
Je pense à toutes les fonctions de la libraire standard du C, je n'ai pas remarqué de fonction ayant un parametre non pointé marqué d'un const
De plus, si on le fait pour les parametres non pointeurs, pourquoi ne pas le faire aussi pour le pointeur des parametres pointés? Emdel a deja utilisé cette syntaxe
Code:void func (const char const * in_str, char const * out_buff);
En un mot : pour ou contre cette pratique?