Diferencia entre Const Int e Int Const en C++
-
Diferencia entre
const int
yint const
en C++ -
Palabra clave
const
de C++ -
const int
yint const
con variables -
const int
yint const
con punteros -
Usar
int * const
en C++ -
Usa
const int *
en C++ - Conclusión
Las preguntas más queridas y difíciles de cualquier lenguaje de programación son aquellas en las que pequeños cambios marcan una gran diferencia en cómo se ejecutará el programa y el resultado que dará.
En este artículo, discutiremos si const int
es lo mismo que int const
en C++ o no.
Diferencia entre const int
y int const
en C++
Código:
int const a = 1000;
const int a = 1000;
Aquí hay dos líneas de código que se ven casi iguales. Ahora, ¿son estas dos líneas de código iguales?
Antes de responder a esa pregunta, revisemos los conceptos básicos de la palabra clave const
de C++.
Palabra clave const
de C++
La palabra clave const
de C++ ayuda a mantener ciertas cosas constantes. Esto significa que si coloca la palabra clave const
antes de cualquier variable, puntero o método, el valor de los elementos de datos de estas variables, punteros y métodos no se puede cambiar mientras el programa se está ejecutando.
Supongamos que intentamos cambiar el valor de cualquier variable, puntero o método que se inicializa con una palabra clave const
, lo que nos da un error.
Código:
#include <iostream>
using namespace std;
int main() {
const int demo = 1; // constant variable
cout << demo;
demo = 2 // changing the value of constant variable
cout
<< demo;
return 0;
}
Producción :
In function 'int main()': error: assignment of read-only variable 'demo'
9 | demo = 2
| ~~~~~^~~
En el ejemplo anterior, declaramos una variable const
demo
y le asignamos el valor 1
. Luego, asignamos un valor diferente, 2
, a la misma variable constante.
Esto da como resultado un error, como puede ver en la salida.
Código:
#include <iostream>
using namespace std;
int main() {
int demo = 1;
cout << "The initial value is: " << demo << endl;
// changing the value of the variable
demo = 2;
cout << "The changed value is: " << demo << endl;
return 0;
}
Producción :
The initial value is: 1
The changed value is: 2
Ahora esta vez, no inicializamos la variable demo
con la palabra clave const
. Por lo tanto, podemos cambiar el valor de esta variable sin obtener ningún error.
Básicamente, así es como funciona la palabra clave const
. Consulte este enlace para obtener más información sobre la palabra clave const
.
Volvamos a la pregunta que teníamos que responder.
const int
y int const
con variables
La forma estándar de adjuntar const
a una variable en C++ es colocar esta palabra clave antes del tipo de datos de la variable. Sin embargo, si lo colocamos antes de la propia variable, cumple el mismo propósito y funciona de manera similar.
Esto significa que las siguientes líneas de código son equivalentes y correctas.
const int demo = 1000;
int const demo = 1000;
Cuando lees tales declaraciones, el truco consiste en ir de derecha a izquierda. Por lo tanto, la primera línea de código se leería como - demo es un entero constante.
Mientras que la segunda línea se lee como - demo es un número entero constante. Sin duda, por decir, ambas afirmaciones significan lo mismo.
Podemos verificar esto a través de un ejemplo de trabajo. En el siguiente ejemplo, colocamos la palabra clave const
antes del tipo de datos, es decir, int
y luego imprimimos la variable demo
.
Código:
#include <iostream>
using namespace std;
int main() {
const int demo = 1000; // const keyword before the data type
cout << demo;
}
Producción :
1000
Probemos lo mismo con la palabra clave const
colocada antes de la variable, demo
misma.
#include <iostream>
using namespace std;
int main() {
int const demo = 1000; // const keyword before the variable itself
cout << demo;
}
Producción :
1000
Vea cómo estas declaraciones funcionan de la misma manera sin que resulte en ningún tipo de error. Podemos usar cualquiera de estas declaraciones cuando tenemos que declarar una variable constante.
Por lo tanto, podemos concluir que int const
es lo mismo que const int
, pero hay una trampa. Esto es cierto para las variables hasta que no aparecen los punteros.
Para punteros, el significado de la palabra clave const
cambia según su posición. Analicemos cómo funciona la palabra clave const
con punteros.
const int
y int const
con punteros
Usar la palabra clave const
con punteros es muy simple. O podemos hacer que el puntero sea inmutable o que el contenido apunte a inmutable.
Mira la siguiente línea de código. El puntero demo
es un puntero constante cuyo valor no se puede cambiar.
Esto significa que no se puede modificar para que apunte a un valor o variable diferente. Leemos esto de derecha a izquierda como - demo es un puntero constante a un número entero.
int* const demo = &anyvalue;
Sin embargo, en este segundo fragmento de código que se proporciona a continuación, los datos a los que apunta el puntero demo
no se pueden cambiar. Leemos esto como - demo es un puntero a un número entero que es constante.
const int *demo = &anyvalue;
Entendamos estas dos líneas de código con ejemplos.
Usar int * const
en C++
Como se mencionó anteriormente, colocar la palabra clave const
antes de la variable del puntero significa que no podemos cambiar el puntero para que apunte a un valor o variable diferente. Esto se puede ver más profundamente a través de un ejemplo.
Los siguientes puntos resumen lo que está sucediendo en el código que se proporciona a continuación.
- Aquí, primero asignamos el valor de la variable
one
a la variable puntero*demo
. Esto significa que el puntero*demo
apunta a la variableone
. - Al imprimir el valor de la variable
one
, obtenemos la salida como1
, mientras que al imprimirdemo
, obtenemos la dirección a la que apunta. Esta es la dirección de la variableone
. - Posteriormente, asignamos otra variable,
dos
, a la misma variable puntero,demo
e imprimimos los valores. Esta vez, el puntero devuelve una dirección diferente.
Código:
#include <iostream>
using namespace std;
int main() {
int one = 1;
int two = 2;
int *demo = &one; // demo pointer points to variable one
cout << one << endl;
cout << demo << endl;
demo = &two; // assigning the variable two to demo variable
cout << two << endl;
cout << demo << endl;
return 0;
}
Producción :
1
0x7ffc22e802a8
2
0x7ffc22e802ac
Puede ver cómo podemos asignar diferentes variables a la misma variable de puntero. Este cambio es imposible si adjunta la palabra clave const
antes de la variable de puntero.
Código:
#include <iostream>
using namespace std;
int main() {
int one = 1;
int two = 2;
int* const demo = &one; // attach const keyword before the pointer variable
cout << one << endl;
cout << demo << endl;
demo = &two; // this assignment will now give an error
cout << two << endl;
cout << demo << endl;
return 0;
}
Producción :
In function 'int main()': error: assignment of read-only variable 'demo'
13 | demo = &two;
| ~~~~~^~~~~~
Tenga en cuenta que esta vez, dado que el puntero declarado es constante, no podemos asignarle una variable diferente. Así obtenemos un error.
Esto es lo que significa int const
cuando se usa con un puntero.
Usa const int *
en C++
Ya sabemos que podemos usar un puntero para cambiar el valor de una variable. Esto se muestra en el siguiente ejemplo.
Los siguientes puntos resumen lo que sucede en este código.
- Primero asignamos el valor,
1
a la variableone
, y el puntero*demo
apunta a la variableone
. - Luego, imprimimos los valores de la variable
one
y el puntero*demo
. Ambos dan la salida como1
. - Posteriormente, asignamos el valor
2
a la variable puntero,*demo
. - Por último, imprimimos los valores de la variable
one
y el punterodemo
, pero esta vez ambos dan como resultado2
.
Código:
#include <iostream>
using namespace std;
int main() {
int one = 1; // variable one holds the value 1
int *demo = &one;
cout << one << endl;
cout << *demo << endl;
*demo = 2; // assign the value 2 to variable demo
cout << one << endl;
cout << *demo << endl;
}
Producción :
1
1
2
2
Vea cómo cambia el valor de la variable con la ayuda del puntero al que se asignó la variable. Ahora, si usa la palabra clave const
antes del tipo de datos del puntero, este tipo de mutabilidad no será posible.
Código:
#include <iostream>
using namespace std;
int main() {
int one = 1;
const int *demo = &one; // attach const keyword before data type
cout << one << endl;
cout << *demo << endl;
*demo = 2; // this assignment will give an error now
cout << one << endl;
cout << *demo << endl;
}
Producción :
In function 'int main()': error: assignment of read-only location '* demo'
12 | *demo = 2;
| ~~~~~~^~~
Tenga en cuenta que obtenemos un error si intentamos cambiar el valor de la variable a la que apunta el puntero. Esto es lo que significa const int
cuando se usa con un puntero.
Conclusión
En este artículo, aprendimos cómo const int
e int const
son diferentes entre sí. Además, vimos cómo funcionan en el contexto de variables y punteros.
También aprendimos que ambos formatos significan lo mismo para variables simples, pero el significado de los punteros cambia significativamente. Entendimos esto a través de varios ejemplos de trabajo y también repasamos los conceptos básicos de la palabra clave const
de C++.