Utilice la palabra clave const con punteros en C++
-
Utilice la palabra clave
const
para denotar objetos inmutables en C++ -
Uso de la palabra clave
const
con tipos de puntero 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;
}
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