Cette question est inspirée d' une question sur final
en java .
En C / C ++, dois-je utiliser const
autant que possible?
Je sais qu'il y a déjà une question connexe concernant l'utilisation des const
paramètres . Malheureusement, cette question et ses réponses ne répondent pas entièrement à ma question, car il s'agit uniquement de paramètres de fonction, mais j'aimerais également connaître d'autres cas (par exemple: les variables locales).
En outre, presque toutes les réponses à cette question disent que nous devrions utiliser const
car il contient des informations utiles sur l'accessibilité des variables. Mais cela semble entrer en conflit avec une réponse sur l'utilisation de final en Java, qui final
peut être superflu s'il ne contient pas d'informations supplémentaires et il doit donc être omis pour garder le code court et propre.
Alors, dois-je utiliser const
autant que possible? Si oui, pourquoi les conseils const
en C ++ sont-ils différents de ceux final
en Java?
la source
final
etconst
n'avez pas les mêmes garanties.Personnellement, cela
const
me prend très peu de temps pour écrire et très peu de temps pour lire, généralement beaucoup moins que pour vérifier si un code mute la variable, et cela m'empêche en fait d'écrire des bogues (quelqu'un a-t-il jamais incrémenté son itérateur final par accident? Etc)Je trouve également que le fait d'être strict sur l'utilisation de const me guide vers un meilleur code par d'autres moyens, comme la création de fonctions d'aide pour effectuer une initialisation non triviale.
la source
Je vais être en désaccord avec les autres affiches et vous recommander de ne pas utiliser de niveau supérieur
const
sur les variables et paramètres locaux. (Les références et les pointeurs vers const, c.-à-dconst T&
. Sont différents, et vous devez les utiliser à des fins de correction à tout moment lorsque cela est approprié.)Les avantages du niveau supérieur
const
sont:Les inconvénients sont:
Ne peut pas être utilisé sur des variables "pseudo-const", c'est-à-dire des variables qui sont initialisées d'une manière plus compliquée que la construction directe, mais non modifiées après, par exemple en utilisant
getline
:Empêche l'optimisation du déplacement lors de l'appel et du retour de fonction:
J'ai travaillé sur une base de code où le local
const
était beaucoup utilisé, et je l'ai trouvé pas du tout utile, mais il a rempli le code de pessimisations subtiles comme ci-dessus. Personnellement, je préfère adopter une politique générale de modification des variables aussi rarement que possible, et de rendre les fonctions suffisamment petites pour que l'utilisation d'une variable soit évidente, et même si elle est modifiée, la complexité de la fonction est suffisamment faible pour en faire un non -problème.la source
const
sur les locaux: car cela empêche les modifications techniques, pas seulement les modifications conceptuelles.Le
const
mot-clé doit être utilisé pour les variables locales, tout comme les paramètres. C'est utile parce que:const
ne devrait prendre qu'une seconde pour écrire, donc ce n'est pas grave.Notez qu'il n'y a pas de bonne / mauvaise réponse ici. Dans votre lien, le répondeur qui a soutenu le plus de votes positifs
final
ne doit pas être utilisé localement. Cependant, le répondeur suivant l'a fortement recommandé.Si votre fonction est simple et triviale , vous ne devez pas en ajouter
const
car tout le monde comprend votre intention. Cependant, si la logique de votre fonction n'est pas triviale, vous devez utiliser le mot clé. N'oubliez pas qu'il y a peu à perdre.la source