Vou falar com C ++, onde essa diferença é mais relevante.
Como você notou corretamente, imutável significa que um objeto não pode ser alterado após a sua criação. É claro que essa criação pode ocorrer em tempo de execução, ou seja, um constobjeto não é necessariamente uma constante em tempo de compilação. No C ++, um objeto é imutável se (1) e (2) ou (3) forem atendidos:
Ele não possui membros declarados mutableque são alterados por constfunções de membro
É declarado const
constfunções de membro não usam const_castpara remover a constqualificação, a fim de alterar qualquer membro
No entanto, você também pode considerar modificadores de acesso: se uma operação modificar internamente uma instância, mas não afetar o estado da instância observável por meio de sua interface pública, o objeto será "logicamente imutável".
Portanto, o C ++ fornece as ferramentas necessárias para criar objetos imutáveis, mas, como quase tudo no C ++, as ferramentas são minimamente suficientes e requerem diligência para realmente serem usadas. O estado de uma instância não está necessariamente confinado às variáveis de membro da instância - porque o C ++ não fornece uma maneira de impor transparência referencial, pode incluir também o estado global ou de classe.
consttambém possui outra função no C ++: qualificar referências e ponteiros. Uma constreferência pode se referir a um não- constobjeto. É legal (embora geralmente não seja necessário ou aconselhável) usar const_castpara alterar um objeto por meio de uma constreferência, se e somente se esse objeto for declarado não const:
int i = 4; // Non-const object.
const int* p = &i; // const pointer.
*const_cast<int*>(p) = 5; // Legal.
E é claro que é um comportamento indefinido modificar um constobjeto:
const int i = 4; // const object.
const int* p = &i; // const pointer.
*const_cast<int*>(p) = 5; // Illegal.
constnão existe em todos os idiomas, e mutabilidade e imutabilidade não existem em todos os idiomas, portanto, tornar esse idioma agonístico não é aplicável. É específico da linguagem apenas onde esses conceitos se aplicam.