Es bastante raro que const ayude realmente al compilador a optimizar.Debe tener en cuenta que el const_cast
se puede usar en cualquier lugar para eliminar la constness de un objeto (aunque modificar el objeto resultante no siempre está bien definido, en algunos casos es así, por lo que el compilador debe tener cuidado al asumir que solo porque un objeto const se pasa a una función, no se modificará)
Del mismo modo, la palabra clave mutable
arruina las cosas. Puede pasar un objeto const a una función, pero ¿y si ese objeto contiene un campo mutable
?
El compilador tiene que trabajar mucho para verificar que es seguro suponer que un objeto es realmente constante, y para el momento en que se hace toda esta verificación, la palabra clave const
en realidad no importa, porque podría han hecho todos los mismos análisis en un objeto no const regular para determinar que no se está modificando y se pueden tratar como constantes.
No diré que no hay unos pocos casos de borde donde la palabra clave const puede habilitar nuevas optimizaciones, pero en general, const
no es una consideración de rendimiento, sino de corrección. Úselo para detectar más errores en tiempo de compilación, no para acelerar su código.
Siempre tenga cuidado con el poder del puntero y el lanzamiento. ;) – kenny
la optimización de const se realiza principalmente en variables const - debe estas optimizaciones por todas partes en el montaje - mi experiencia si desde vC++ sin embargo. –
Una vez me dejó perplejo un caso en el que const activó una optimización: http://stackoverflow.com/questions/1121791/optimisation-of-division-in-gcc. Resultó ser solo mi versión "severamente vieja" de gcc: en las versiones más nuevas, la const no era diferente del rendimiento, que es lo que esperaba. Tenga en cuenta que mi expectativa era que const * debería * no hacer ninguna diferencia en el rendimiento, me decepcionó cuando lo hizo. Debido al aliasing, 'const' casi nunca permite al compilador asumir que algo no cambiará, excepto en situaciones donde un compilador inteligente puede ver que no cambia incluso sin const. –