Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Cuando modifica una declaración de datos, la const palabra clave especifica que el objeto o la variable no se pueden modificar.
Sintaxis
declarator:
ptr-declarator
noptr-declaratorparameters-and-qualifierstrailing-return-type
ptr-declarator:
noptr-declarator
ptr-operatorptr-declarator
noptr-declarator:
declarator-idattribute-specifier-seqoptar
noptr-declaratorparameters-and-qualifiers
noptr-declarator[constant-expressionoptar]attribute-specifier-seqoptar
(ptr-declarator)
parameters-and-qualifiers:
(parameter-declaration-clause)cv-qualifier-seqoptar
ref-qualifieroptarnoexcept-specifieroptarattribute-specifier-seqoptar
trailing-return-type:
->type-id
ptr-operator:
*attribute-specifier-seqoptarcv-qualifier-seqoptar
&attribute-specifier-seqoptar
&&attribute-specifier-seqoptar
nested-name-specifier*attribute-specifier-seqoptarcv-qualifier-seqoptar
cv-qualifier-seq:
cv-qualifiercv-qualifier-seqoptar
cv-qualifier:
const
volatile
ref-qualifier:
&
&&
declarator-id:
...optarid-expression
Valores de const
La const palabra clave especifica que el valor de una variable es constante y indica al compilador que impida que el programador lo modifique.
// constant_values1.cpp
int main() {
const int i = 5;
i = 10; // C3892
i++; // C2105
}
En C++, puede usar la const palabra clave en lugar de la #define directiva de preprocesador para definir valores constantes. Los valores definidos con const están sujetos a la comprobación de tipos y se pueden usar en lugar de expresiones constantes. En C++, puede especificar el tamaño de una matriz con una const variable de la siguiente manera:
// constant_values2.cpp
// compile with: /c
const int maxarray = 255;
char store_char[maxarray]; // allowed in C++; not allowed in C
En C, los valores constantes tienen como valor predeterminado la vinculación externa, por lo que solo pueden aparecer en archivos de origen. En C++, los valores constantes predeterminados son la vinculación interna, lo que les permite aparecer en los archivos de encabezado.
La const palabra clave también se puede usar en declaraciones de puntero.
// constant_values3.cpp
int main() {
char this_char{'a'}, that_char{'b'};
char *mybuf = &this_char, *yourbuf = &that_char;
char *const aptr = mybuf;
*aptr = 'c'; // OK
aptr = yourbuf; // C3892
}
Un puntero a una variable declarada como const solo se puede asignar a un puntero que también se declara como const.
// constant_values4.cpp
#include <stdio.h>
int main() {
const char *mybuf = "test";
char *yourbuf = "test2";
printf_s("%s\n", mybuf);
const char *bptr = mybuf; // Pointer to constant data
printf_s("%s\n", bptr);
// *bptr = 'a'; // Error
}
Puede usar punteros a datos constantes como parámetros de función para evitar que la función modifique un parámetro pasado a través de un puntero.
En el caso de los objetos declarados como const, solo puede llamar a funciones miembro constantes. El compilador garantiza que el objeto constante nunca se modifique.
birthday.getMonth(); // Okay
birthday.setMonth( 4 ); // Error
Puede llamar a funciones miembro constantes o no constantes para un objeto no constante. También puede sobrecargar una función miembro mediante la const palabra clave ; esta característica permite llamar a una versión diferente de la función para objetos constantes y no constantes.
No se pueden declarar constructores ni destructores con la const palabra clave .
const funciones miembro
Declarar una función miembro con la const palabra clave especifica que la función es una función de solo lectura que no modifica el objeto para el que se llama. Una función miembro constante no puede modificar ningún miembro de datos no estático ni llamar a ninguna función miembro que no sea constante. Para declarar una función miembro constante, coloque la const palabra clave después del paréntesis de cierre de la lista de argumentos. La const palabra clave es necesaria tanto en la declaración como en la definición.
// constant_member_function.cpp
class Date
{
public:
Date( int mn, int dy, int yr );
int getMonth() const; // A read-only function
void setMonth( int mn ); // A write function; can't be const
private:
int month;
};
int Date::getMonth() const
{
return month; // Doesn't modify anything
}
void Date::setMonth( int mn )
{
month = mn; // Modifies data member
}
int main()
{
Date MyDate( 7, 4, 1998 );
const Date BirthDate( 1, 18, 1953 );
MyDate.setMonth( 4 ); // Okay
BirthDate.getMonth(); // Okay
BirthDate.setMonth( 4 ); // C2662 Error
}
Diferencias de C y C++ const
Al definir una const variable en un archivo de código fuente de C, haga lo siguiente:
const int i = 2;
A continuación, puede usar esta variable en otro módulo de la siguiente manera:
extern const int i;
Pero para obtener el mismo comportamiento en C++, debe definir la const variable como:
extern const int i = 2;
De forma similar a C, puede usar esta variable en otro módulo de la siguiente manera:
extern const int i;
Si desea definir una extern variable en un archivo de código fuente de C++ para su uso en un archivo de código fuente de C, use:
extern "C" const int x=10;
para evitar la administración de nombres por parte del compilador de C++.
Observaciones
Cuando se sigue la lista de parámetros de una función miembro, la const palabra clave especifica que la función no modifica el objeto para el que se invoca.
Para obtener más información sobre const, consulte los siguientes artículos: