Je vais parler de C ++, où cette différence est la plus pertinente.
Comme vous le constatez correctement, immuable signifie qu'un objet ne peut pas changer du tout après sa création. Cette création peut bien sûr se produire au moment de l'exécution, c'est-à-dire qu'un constobjet n'est pas nécessairement une constante au moment de la compilation. En C ++, un objet est immuable si (1) et (2) ou (3) sont respectés:
Il n'a pas de membres déclarés mutablequi sont mutés par constles fonctions membres
 
Il est déclaré const
 
constles fonctions membres n'utilisent pas const_castpour supprimer la constqualification afin de muter des membres
 
Cependant, vous pouvez également envisager des modificateurs d'accès: si une opération mute en interne une instance, mais n'a aucun effet sur l'état de l'instance observable via son interface publique, alors l'objet est «logiquement immuable».
C ++ fournit donc les outils nécessaires pour créer des objets immuables, mais comme la plupart des éléments en C ++, les outils ne sont que très peu suffisants et nécessitent une diligence pour être réellement utilisés. L'état d'une instance n'est pas nécessairement limité aux variables membres de l'instance - car C ++ ne fournit pas un moyen d'imposer la transparence référentielle, il peut également inclure un état global ou de classe.
consta également une autre fonction en C ++: qualifier les références et les pointeurs. Une constréférence peut faire référence à un non- constobjet. Il est légal (mais pas généralement nécessaire ou conseillé) d'utiliser const_castpour muter un objet via une constréférence, si et seulement si cet objet est déclaré non const:
int        i = 4;         // Non-const object.
const int* p = &i;        // const pointer.
*const_cast<int*>(p) = 5; // Legal.
Et bien sûr, c'est un comportement indéfini de muter un constobjet:
const int  i = 4;         // const object.
const int* p = &i;        // const pointer.
*const_cast<int*>(p) = 5; // Illegal.
               
              
constn'existe pas dans toutes les langues, et la mutabilité et l'immuabilité n'existent pas dans toutes les langues, donc rendre ce langage agonistique n'est pas applicable. Il est spécifique au langage uniquement lorsque ces concepts s'appliquent.