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
}