Utilice la palabra clave const con punteros en C++

Jinku Hu 12 octubre 2023
  1. Utilice la palabra clave const para denotar objetos inmutables en C++
  2. Uso de la palabra clave const con tipos de puntero en C++
Utilice la palabra clave const con punteros en C++

Este artículo le mostrará métodos de cómo utilizar la palabra clave const con punteros en C++.

Utilice la palabra clave const para denotar objetos inmutables en C++

Generalmente, la palabra clave const se usa para especificar que el objeto dado será inmutable durante la ejecución del programa. La práctica de nombrar los valores constantes ayuda a mantener el código base más ajustable y fácil de mantener en comparación con la especificación directa de valores literales. Además, la palabra clave const es muy utilizada por las interfaces de función para indicar que los parámetros dados son de solo lectura y ayudan a mitigar los errores de tiempo de ejecución a los de tiempo de compilación.

Declaramos un objeto const al incluir la palabra clave antes del especificador de tipo, como se muestra en el siguiente fragmento de código. Aquí, observará que la variable s1 se crea como la string de sólo lectura, y los objetos const no pueden asignarse un valor diferente. Por lo tanto, deben inicializarse durante la declaración. Si intentamos modificar el objeto const, se lanza el error del compilador.

#include <iostream>

using std::cout;
using std::endl;
using std::string;

int main() {
  const string s1("Hello");
  string s2("Hello");

  //    s1 += "Joe"; // Error
  s2 += "Joe";

  cout << "s1: " << s1 << endl;
  cout << "s2: " << s2 << endl;

  return EXIT_SUCCESS;
}

Producción :

s1: Hello
s2: HelloJoe

Uso de la palabra clave const con tipos de puntero en C++

Tenga en cuenta que cuando declaramos un objeto puntero, generalmente también incluimos el tipo de objeto señalado. Por tanto, resulta complicado especificar sólo una palabra clave const como prefijo de la declaración de declaración. En consecuencia, necesitamos tener especificadores const separados para el puntero y el objeto puntiagudo en sí.

Generalmente, tendríamos tres combinaciones de estos especificadores: la primera en la que tanto el puntero como el objeto no son modificables; la segunda combinación en la que el puntero no se puede reasignar, pero el objeto en sí es mutable; finalmente, tenemos la variante donde el puntero es mutable y el objeto no.

Las tres variantes se declaran en el siguiente fragmento de código para demostrar la notación de sintaxis correspondiente. A veces, se sugiere leer estas declaraciones desde el especificador más a la derecha hacia la izquierda, pero también puede recordar que el declarador *const se usa para indicar los punteros inmutables.

#include <iostream>

using std::cout;
using std::endl;
using std::string;

int main() {
  string s2("Hello");

  const string *const s3 = &s2;  // both are non-mutable
  s3 = &s2;                      // Error
  *s3 = s2;                      // Error

  const string *s4 = &s2;  // only string object is non-mutable
  s4 = s3;
  *s4 = s2;  // Error

  string *const s5 = &s2;  // only pointer is non-mutable
  s5 = s3;                 // Error
  *s5 = s2;

  return EXIT_SUCCESS;
}
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artículo relacionado - C++ Const