OVH Cloud OVH Cloud

parametre de fonction const

1 réponse
Avatar
Philippe Mesmeur
J'ai eu une longue discussion hier au sujet des parametres de fonction
const.

La personne etait pour mettre "const" devant TOUS les parametres ne devant
pas etre modifies.

A mon avis, il faut le faire que SI le parametre est un pointeur ou une
référence.

int fct1(const int* i);
int fct2(const int& i);

La discussion tournait autours d'une utilisation du const comme:
int fct3(const int i);

comme un argument est passé par copie à une fonction, meme si à la sortie la
copie à été modifiée, il n'en sera rien pour la valeur initiale.

   Je pense donc que le const n'a pas d'interet.

D'autres disent que le fait de mettre un const empeche de modifier la valeur
du parametre dans le code de la fonction (ce qui n'est pas faut) et qu'il
faut mettre const des que possible (c'est à dire tres souvent).

Que pensez vous de tout ça?
Connaissez vous de bonne pages www qui traitent du sujet.

Merci d'avance pour la réponse

Philippe

1 réponse

Avatar
Ivan Vecerina
"Philippe Mesmeur" wrote in message
news:4202b4de$0$19921$
J'ai eu une longue discussion hier au sujet des parametres de fonction
const.

La personne etait pour mettre "const" devant TOUS les parametres ne devant
pas etre modifies.

A mon avis, il faut le faire que SI le parametre est un pointeur ou une
référence.

int fct1(const int* i);
int fct2(const int& i);

La discussion tournait autours d'une utilisation du const comme:
int fct3(const int i);

comme un argument est passé par copie à une fonction, meme si à la sortie
la
copie à été modifiée, il n'en sera rien pour la valeur initiale.

Je pense donc que le const n'a pas d'interet.


Ce const n'a clairement aucun intérêt dans la déclaration simple de
la fonction. Le fait que la fonction modifie ou non son paramètre
reçu par copie ne regarde en rien l'appelant.
Il a cependant sa place dans l'implémentation de celle-ci.

D'autres disent que le fait de mettre un const empeche de modifier la
valeur
du parametre dans le code de la fonction (ce qui n'est pas faut) et qu'il
faut mettre const des que possible (c'est à dire tres souvent).
Qu'il s'agisse de variables locales ou de paramètres reçus par copie,

'const' a de sérieux avantages pour la maintenance et la fiabilité
du code (voire potentiellement en terme de performance).
Dans les deux cas, donc, il n'est jamais mauvais de l'ajouter
const lorsque c'est possible.

Que pensez vous de tout ça?


La chose qu'il faut comprendre, c'est qu'en C++ les deux déclarations
suivantes sont identiques:
void f(int i);
void f(int const i);
Techniquement, le const de 'top-niveau' d'un paramètre par copie
ne fait pas partie de la signature de la fonction.

La bonne approche est donc la suivante:
Lors d'une déclaration simple/forward (fichier .h en général),
n'indiquer que la signature de la fonction:
void f(int i);
Là où la fonction est implémentée, ajouter le const lorsque
c'est possible ou judicieux:
void f(int const i)
{
...implémentation...
}


Connaissez vous de bonne pages www qui traitent du sujet.
Pas vraiment, juste maintes questions similaires sur clc++ ...



Salutations,
Ivan
--
http://ivan.vecerina.com/contact/?subject=NG_POST <- email contact form