const

La palabra reservada const indica que un objeto no es modificable.

Podemos declarar como const:

  • Variables
  • Punteros
  • Referencias
  • Clases
  • Variables miembro de clase
  • Funciones miembro de clase


Una variable declarada como const no puede ser modificada, es una constante.
const int var = 5;     //El contenido de var es 5


Puntero.
Un puntero puede ser constante, o puede apuntar a una constante o ambas cosas

      const int i;
      const int *p;    //Puntero a constante
      p = &i;
Este puntero no puede modificar el contenido de la constante a la que apunta

      int i;
      conts *int p;  //Puntero constante
      p = &i;
Un puntero constante puede modificar el objeto apuntado, pero no puede apuntar a otro objeto.

      const int i;
      const int * const p;   //Puntero constante a constante
      p = &i;
Un puntero constante a una constante no puede modificar el valor de la constante y no puede apuntar a otro objeto.



Podemos declarar una función miembro como const. Estas funciones no pueden modificar el objeto y sólo pueden operar sobre otros objetos const.

Las funciones miembro definidas como const, también deben tener la palabra reservada const en su definición.

class MyClass{
private:
      int i;

public:
      void cambiar_i(int) const;
      void cambiar_i2(int);

};

void MyClass::cambiar_i(int _i) const
{
      i = _i;  //error de compilación, se trata de cambiar el valor en una función declarada const

}

void MyClass::cambiar_i2(int _i)
{
      i= _i;   //Aquí no se produciría error ya que la función no es declarada como const
}