Cómo utilizar la palabra clave const en C ++
LA puntero es una variable que " puntos en el " otras variables en C ++. La palabra clave const significa que una variable no se puede cambiar una vez que ha sido declarado e inicializado.
const double PI = 3.1415926535-
Los argumentos a funciones también se pueden declarar const, lo que significa que el argumento no puede ser cambiado dentro de la función. Sin embargo, esto introduce una dicotomía interesante en el caso de variables de puntero. Considere la siguiente declaración:
int const * pInt-
Exactamente lo que es la constante en esta lista? ¿Qué se puede no cambiar? ¿Es la variable medio litro o el entero apuntado por ¿medio litro? Resulta que ambas cosas son posibles, pero esta declaración declara un puntero variable a una posición de memoria constante. Por lo tanto el siguiente:
const int * pInt- // declarar un puntero a una constante intint nVar pinta = nVar- // esto es permitido * pinta = 10 - // pero esto no es
Puede cambiar el valor de medio litro, por ejemplo, asignándole la dirección de nVar. Pero el trabajo final en el ejemplo de fragmento de código genera un error del compilador ya que no puedes cambiar el const int apuntando al por medio litro.
¿Qué pasa si usted tenía la intención de crear una variable puntero con un valor constante? El siguiente fragmento muestra esto en acción:
int nVar-int * const cpInt = nVar- // declarar un puntero constante // a una variable entera * cpInt = 10 // ahora esto es legal ... cpInt ++ - // ... pero esto no es
La variable cpInt es un puntero constante a una variable int. El programador no puede cambiar el valor del puntero, pero puede cambiar el valor del entero señaló.
los const-ness se puede agregar a través de una asignación o inicialización pero no puede ser (fácilmente) desechado. Por lo tanto, la siguiente:
int nVar = 10-int PVAR = nVar-const int * pcVar = pVar- // esto es legalint * pVar2 = pcVar - // esto no es
La asignación pcVar = PVAR- está bien - esto es la adición de la const restricción. El trabajo final en el fragmento no está permitido ya que los intentos para eliminar el const-ness restricción del pcVar.
Una variable puede proceder a la refundición de manera implícita como parte de una llamada de función, como en el siguiente ejemplo:
fn void (const int nVar) -void mainFn () {int n-fn (10) - // llama fn (int const) fn (n) - // llama a la misma función por tratamiento de n} // como si fuera const
La declaración fn (int const) dice que la función fn () no modifica el valor de su argumento. Esto es importante cuando se pasa una referencia a la constante de 10. No es importante cuando se pasa una referencia a la variable n, pero no me duele nada.
Finalmente, const se puede utilizar como un discriminador entre las funciones del mismo nombre:
fn void (const int nVar) fn -void (int nVar) -void mainFn () {int n-fn (10) - // llama a la primera functionfn (n) - // llama a la segunda función}