Compartir a través de


const (C++)

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-declarator parameters-and-qualifiers trailing-return-type
ptr-declarator:
noptr-declarator
ptr-operator ptr-declarator
noptr-declarator:
declarator-id attribute-specifier-seq optar
noptr-declarator parameters-and-qualifiers
noptr-declarator [ constant-expression optar]attribute-specifier-seqoptar
( ptr-declarator )
parameters-and-qualifiers:
( parameter-declaration-clause ) cv-qualifier-seq optar
ref-qualifier optarnoexcept-specifieroptarattribute-specifier-seqoptar
trailing-return-type:
-> type-id
ptr-operator:
* attribute-specifier-seq optarcv-qualifier-seqoptar
& attribute-specifier-seq optar
&& attribute-specifier-seq optar
nested-name-specifier * attribute-specifier-seq optarcv-qualifier-seqoptar
cv-qualifier-seq:
cv-qualifier cv-qualifier-seq optar
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:

Consulte también

Palabras clave