Necesita comprender la razón, para evitar la "programación de culto a la carga". Marcar cadenas como const hace una diferencia en el rendimiento porque ya no necesita usar un incremento entrelazado y decremento del refcount en la cadena, una operación que en realidad se vuelve más cara, no menos, con el paso del tiempo porque más núcleos significa más trabajo eso tiene que hacerse para mantener sincronizadas las operaciones atómicas. Esto es seguro ya que el compilador aplica la restricción "esta variable no cambiará".
Para los ordinales, que suelen ser de 4 bytes o menos, no hay ganancia de rendimiento. Con const, la optimización solo funciona cuando usa tipos de valores de más de 4 bytes, como matrices o registros, o tipos contados como cadenas e interfaces.
Sin embargo, hay otra ventaja importante: la legibilidad del código. Si pasa algo como const y no hace ninguna diferencia en absoluto al compilador, aún puede hacer una diferencia en , ya que puede leer el código y ver que la intención es que no se modifique. Eso puede ser significativo si no has visto el código antes (alguien más lo escribió) o si vuelves a él después de un largo tiempo y no recuerdas exactamente lo que estabas pensando cuando lo escribiste originalmente.
+1 ciertamente una explicación más satisfactoria que la mía – jpfollenius
Su primer párrafo es incorrecto con respecto a las cadenas. Las cadenas siempre pasan como su representación de puntero de cuatro bytes. 'Const' suprime el código en el prólogo y epílogo de la función que actualiza el recuento de referencias de la cadena. Lo mismo aplica para los parámetros de interfaz y las matrices dinámicas. Del mismo modo, los registros se pasan como punteros. 'Const' simplemente suprime el código de prólogo que copia el registro en la pila local de la función. En otras palabras, 'const' no tiene * efecto * en el lado * caller * de una función. Solo afecta al receptor de la llamada. –
@Rob: Bummer que los comentarios no se pueden editar. Es fácil leer mal su comentario como si dijera que los registros siempre se pasan como punteros. –