Laissons de côté les méthodes et les examiner seulement les objets const; le compilateur a beaucoup plus de possibilités d'optimisation. Si un objet est déclarée const, puis de l'ISO (ISO/IEC 14882:2003 7.1.5.1(4)):
Sauf que tout membre de la classe déclarée
mutable (7.1.1) peut être modifié, tout
tentative de modifier un objet const
au cours de sa durée de vie (3.8) des résultats de l'
un comportement indéfini.
Permet d'ignorer les objets qui peuvent avoir mutable membres - le compilateur est libre de supposer que l'objet ne sera pas modifié, donc il peut produire d'importantes optimisations. Ces optimisations peuvent inclure des choses comme:
- incorporation de l'objet de valeur directement dans les machines d'instruction opcode
- l'élimination complète de code qui ne peut jamais être atteint parce que la const objet est utilisé dans une expression conditionnelle qui est connu au moment de la compilation
- déroulement de la boucle si le const objet est de contrôler le nombre d'itérations d'une boucle
Notez que cela s'applique seulement si l'objet réel est const - il ne s'applique pas aux objets qui sont accessibles par le biais de const pointeurs ou des références parce que les chemins d'accès peuvent conduire à des objets qui ne sont pas const (c'est encore bien défini pour modifier les objets quoique const pointeurs/références tant que l'objet réel est non-const et vous éloigner de la constness de la voie d'accès à l'objet).
Dans la pratique, je ne pense pas qu'il existe des compilateurs qui d'effectuer d'importantes optimisations pour tous les types d'objets const. mais pour les objets qui sont des types primitifs (entiers, caractères, etc.) Je pense que les compilateurs peuvent être assez agressifs dans l'optimisation de
l'utilisation de ces éléments.