74 votes

"Const" n'est-il pas redondant lors du passage par valeur?

J'étais à la lecture de mon C++ livre (Deitel) quand je suis tombé sur une fonction pour calculer le volume d'un cube. Le code est le suivant:

double cube (const double side){
    return side * side * side;
}

L'explication pour l'utilisation de la "const" qualificatif était celui-ci: "La const qualifié doit être utilisé pour appliquer le principe de moindre privilège, de dire au compilateur que la fonction ne modifie pas la variable de côté".

Ma question: n'est-ce pas l'utilisation de "const" redondant/inutile ici puisque la variable est passée par valeur, donc la fonction ne peut pas le modifier de toute façon?

104voto

Ernest Friedman-Hill Points 56605

L' const empêche également le code à l'intérieur de la fonction de modifier le paramètre lui-même. Lorsqu'une fonction est plus que négligeable de la taille, une telle assurance vous permet de lire et de comprendre une fonction. Si vous savez que la valeur de side ne changera pas, alors vous n'avez pas à vous soucier de garder une trace de sa valeur au fil du temps que vous lisez. Dans certaines circonstances, il peut même aider le compilateur de générer un code de meilleure qualité.

Un nombre non négligeable de personnes font cela comme une question de cours, considérant qu'il est généralement un bon style.

50voto

psur Points 2072

Vous pouvez faire quelque chose comme ça:

 int f(int x)
{
   x = 3; //with "const int x" it would be forbidden

   // now x doesn't have initial value
   // which can be misleading in big functions

}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X