Como otros han explicado, la norma dice que está bien, y que el compilador puede permitirse ser indulgentes con la aplicación de esta, ya que no afecta a la persona que llama, pero nadie respondió por qué el compilador debe elegir ser indulgente. No es particularmente indulgente en general, y un programador que acaba de mirar la interfaz y luego se zambulle en la implementación puede tener en mente que un parámetro es const cuando no lo es o viceversa, no es algo bueno.
Esta indulgencia permite cambios de implementación sin modificar los encabezados, que al usar herramientas de creación tradicionales desencadena la recompilación del código de cliente. Esto puede ser un problema serio en el desarrollo de escala empresarial, donde un cambio no sustancial en un encabezado de bajo nivel (por ejemplo, el registro) puede forzar la reconstrucción de prácticamente todos los objetos entre él y las aplicaciones ... desperdiciando miles de horas de tiempo de CPU y retrasando a todos y todo lo que espera en las compilaciones.
Por lo tanto, es feo, pero una concesión práctica.
También he respondido otra pregunta similar que analiza por qué la sobrecarga de f (const T) y no está permitido f (T) - pueda ser de interés para cualquiera que lea esto - Top-level const doesn't influence a function signature
Por favor, consultar acerca punteros. – alternative
@mathepic: ¿Qué tiene que ver este código con los punteros? – casablanca
@casablanca Todo - Parece que hes mezclando const int e int como siendo int e int *. – alternative