Diferencia entre Const Int e Int Const en C++

Shikha Chaudhary 16 febrero 2024
  1. Diferencia entre const int y int const en C++
  2. Palabra clave const de C++
  3. const int y int const con variables
  4. const int y int const con punteros
  5. Usar int * const en C++
  6. Usa const int * en C++
  7. Conclusión
Diferencia entre Const Int e Int Const en C++

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.

  1. Aquí, primero asignamos el valor de la variable one a la variable puntero *demo. Esto significa que el puntero *demo apunta a la variable one.
  2. Al imprimir el valor de la variable one, obtenemos la salida como 1, mientras que al imprimir demo, obtenemos la dirección a la que apunta. Esta es la dirección de la variable one.
  3. 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.

  1. Primero asignamos el valor, 1 a la variable one, y el puntero *demo apunta a la variable one.
  2. Luego, imprimimos los valores de la variable one y el puntero *demo. Ambos dan la salida como 1.
  3. Posteriormente, asignamos el valor 2 a la variable puntero, *demo.
  4. Por último, imprimimos los valores de la variable one y el puntero demo, pero esta vez ambos dan como resultado 2.

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++.

Artículo relacionado - C++ Keyword