Vous devez comprendre la raison, pour éviter la «programmation de la cargaison-culte». Marquer des chaînes comme const fait une différence de performance car vous n'avez plus besoin d'utiliser un incrément et une décrémentation du refcount sur la chaîne, une opération qui devient plus chère, pas moins, au fil du temps car plus de cœurs signifie plus de travail cela doit être fait pour synchroniser les opérations atomiques. Ceci est sûr car le compilateur applique la contrainte "cette variable ne sera pas modifiée".
Pour les ordinaux, qui sont généralement de 4 octets ou moins, il n'y a pas de gain de performance à obtenir. L'utilisation de const comme optimisation ne fonctionne que lorsque vous utilisez des types de valeur supérieurs à 4 octets, tels que des tableaux ou des enregistrements, ou des types comptés par référence tels que des chaînes et des interfaces.
Cependant, il existe un autre avantage important: la lisibilité du code. Si vous passez quelque chose comme const et cela ne fait aucune différence pour le compilateur, il peut encore faire la différence à vous, puisque vous pouvez lire le code et voir que l'intention de cela était de ne pas être modifié. Cela peut être important si vous n'avez pas vu le code auparavant (quelqu'un d'autre l'a écrit) ou si vous y revenez après une longue période et ne vous souvenez pas exactement de ce que vous pensiez quand vous l'avez écrit.
+1 certainement une explication plus satisfaisante que la mienne – jpfollenius
Votre premier paragraphe est faux en ce qui concerne les chaînes. Les chaînes sont toujours passées en tant que leur représentation de pointeur de quatre octets. 'Const' supprime le code dans le prologue et l'épilogue de la fonction qui met à jour le nombre de références de la chaîne. Il en va de même pour les paramètres d'interface et les tableaux dynamiques. De même, les enregistrements sont passés en tant que pointeurs. 'Const' supprime simplement le code prologue qui copie l'enregistrement sur la pile locale de la fonction. En d'autres termes, 'const' n'a * aucun effet * sur le côté * appelant * d'une fonction. Cela affecte uniquement le destinataire de l'appel. –
@Rob: Bummer que les commentaires ne peuvent pas être modifiés. Il est facile de mal interpréter votre commentaire comme si vous disiez que les enregistrements sont toujours transmis comme des pointeurs. –