Il est parfaitement possible de déclarer constant largument dune fonction, avec le mot clé const
, comme on le ferait pour une autre donnée. Cependant, cest sans intérêt pour les arguments usuels, car sils sont passés par valeur, la fonction ne peut les modifier extérieurement, et sils sont passés par référence, cest bien en général pour les modifier (sauf dans le cas de grands types, comme on la vu précédemment).
Par contre, cest particulièrement intéressant pour les tableaux et les pointeurs. Imaginons par exemple que nous programmions une fonction qui calcule la somme des n
premiers termes dun tableau. Dans ce cas, le tableau na aucune raison dêtre modifié, bien au contraire. Cependant, une fausse manipulation provoquera cette modification, ce qui risque dêtre catastrophique, la fonction ayant alors un effet de bord inattendu.
Voici comment créer une telle fonction de manière précautionneuse :
long sommetab(unsigned n, const int *tab) { long somme = 0; while (n-- > 0) somme += *tab++; return somme; }
Observons que la fonction ne se prive pas de modifier n
et le pointeur tab
, qui eux ne sont pas constants : comme ce sont des arguments passés par valeur, il ny a aucun risque. Cependant, les éléments du tableau sont constants ; dès lors, si lon avait écrit par erreur (*tab)++
au lieu de *tab++
, on aurait eu le message Error : Cannot modify a const object, on ne peut modifier un objet constant.
Précédent | Sommaire | Suivant |