Esto significa que, dentro del método constante, el compilador tratará como error cualquier llamada a otros métodos no constantes o la modificación de cualquier campo del objeto.
En C++, un campo puede ser declarado como mutable, indicando que la anterior restricción no se aplica sobre él.
En C y otros lenguajes derivados, todos los tipos de datos -incluyendo los definidos por el usuario— pueden ser declarados con const.
Una correctitud de constantes dicta que todas las variables u objetos deben ser declarados constantes a no ser que exista intención de modificarlos.
La flexibilidad para situar el calificador const existe por razones históricas[2] —el C y C++ previos a la estandarización imponían pocas, o ninguna regla de ordenación en los calificadores de tipo—.
int const * punteroAConstante puede leerse como *punteroAConstante es un int const —el valor es constante—, o punteroAConstante es un int const * —el puntero apunta a un entero constante—: Según la convención de C++ de analizar el tipo, no el valor, la regla general es leer la declaración de derecha a izquierda.
También está permitido situar const a la izquierda del tipo en C y C++, como en la siguiente sintaxis: Esta notación separa con mayor claridad las dos localizaciones de const, y permite que el * siempre se asocie a su tipo precedente, aunque aún necesite ser leído de izquierda a derecha: Las referencias de C++ siguen normas similares.
Declarar una referencia const es redundante, ya que no es posible hacer que una referencia apunte a otro objeto: Se pueden obtener declaraciones realmente complicadas usando vectores multidimensionales y referencias —o punteros— a punteros; sin embargo, estos usos se consideran confusos y propensos a errores; en consecuencia, se aconseja evitarlos o reemplazarlos por estructuras de mayor nivel de abstracción.
Una variable const estática —variable global o variable estática local— es una constante, y debe usarse para representar datos como constantes matemáticas —por ejemplo, const double PI = 3.14159— o parámetros generales en tiempo de compilación.
Un parámetro pasado como referencia const indica que el valor referenciado no se modificará, pues forma parte del contrato.
El calificador const aplicado sobre un método de instancia afecta al objeto apuntado por el puntero this, que es un argumento implícito pasado a todos los métodos de instancia.
Por ejemplo: La calificación const del objeto determina qué versión de MiVector::Get() será llamada, y si se obtendrá una referencia que pueda ser modificada o de sólo lectura.
Existe una excepción[3] que se aplica tanto a C como a C++: los campos puntero o referencia «ignoran» la calificación const de sus propietarios —es decir, en un objeto constante, todos sus miembros son constantes, excepto en el caso de punteros y referencias—.
Por este motivo, se ha argumentado que la calificación por defecto para punteros y referencias miembro debe ser una correctitud de constantes más profunda, pudiendo modificar el comportamiento por defecto con el calificador mutable cuando el dato apuntado no pertenezca al objeto contenedor, pero aplicar este cambio crearía problemas de compatibilidad con código existente.
El cualificador volatile de C y C++ indica que un objeto puede ser cambiado externamente en cualquier momento por medios ajenos al programa y, por lo tanto, debe volverse a leer de la memoria cuando se accede a él.
Los métodos en Java pueden ser declarados como final, pero este tipo de declaración no tiene relación con la correctitud de constantes sino con la herencia —significa que el método no puede ser sobreescrito en clases derivadas—.
El contrario que C++, C# no permite calificar métodos y parámetros con const.
Sin embargo, también se pueden utilizar parámetros de sólo lectura; el .NET Framework proporciona soporte para convertir colecciones modificables en colecciones inmutables que pueden ser pasadas a métodos y funciones.