web-dev-qa-db-fra.com

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

Je lisais mon livre C++ (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 utiliser le qualificatif "const" était celle-ci: "Le const qualifié doit être utilisé pour appliquer le principe du moindre privilège, en disant au compilateur que la fonction ne modifie pas le côté variable".

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

72
Daniel Scocco

Le qualificatif const empêche le code à l'intérieur de la fonction de modifier le paramètre lui-même. Lorsqu'une fonction est plus grande que la taille triviale, une telle assurance vous aide à lire et à comprendre rapidement une fonction. Si vous savez que la valeur de side ne changera pas, vous n'avez pas à vous soucier de garder une trace de sa valeur au fil du temps pendant que vous lisez. Dans certaines circonstances, cela pourrait même aider le compilateur à générer un meilleur code.

Un nombre non négligeable de personnes le font naturellement, le considérant généralement comme un bon style.

101

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

}
49
psur