const (C++)const (C++)

Al modificar una declaración de datos, la const palabra clave especifica que el objeto o la variable no es modificable.When modifying a data declaration, the const keyword specifies that the object or variable is not modifiable.

SintaxisSyntax

const declaration ;
member-function const ;

valores constconst values

La const palabra clave especifica que el valor de una variable es constante e indica al compilador que evite que el programador la modifique.The const keyword specifies that a variable's value is constant and tells the compiler to prevent the programmer from modifying it.

// 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 Directiva de preprocesador #define para definir valores constantes.In C++, you can use the const keyword instead of the #define preprocessor directive to define constant values. Los valores definidos con const están sujetos a la comprobación de tipos y se pueden usar en lugar de expresiones constantes.Values defined with const are subject to type checking, and can be used in place of constant expressions. En C++, puede especificar el tamaño de una matriz con una const variable como se indica a continuación:In C++, you can specify the size of an array with a const variable as follows:

// 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 la vinculación externa como valor predeterminado, por lo que solo pueden aparecer en los archivos de código fuente.In C, constant values default to external linkage, so they can appear only in source files. En C++, los valores constantes tienen la vinculación interna como valor predeterminado, que permite que aparezcan en los archivos de encabezado.In C++, constant values default to internal linkage, which allows them to appear in header files.

La const palabra clave también se puede utilizar en declaraciones de puntero.The const keyword can also be used in pointer declarations.

// constant_values3.cpp
int main() {
   char *mybuf = 0, *yourbuf;
   char *const aptr = mybuf;
   *aptr = 'a';   // 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 .A pointer to a variable declared as const can be assigned only to a pointer that is also declared as 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 utilizar 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.You can use pointers to constant data as function parameters to prevent the function from modifying a parameter passed through a pointer.

En el caso de los objetos que se declaran como const , solo puede llamar a funciones miembro de constante.For objects that are declared as const, you can only call constant member functions. Esto garantiza que el objeto constante nunca se modifique.This ensures that the constant object is never modified.

birthday.getMonth();    // Okay
birthday.setMonth( 4 ); // Error

Se puede llamar a funciones miembro de constante o que no son de constante para un objeto que no es constante.You can call either constant or nonconstant member functions for a nonconstant object. También puede sobrecargar una función miembro mediante la const palabra clave; esto permite que se llame a una versión diferente de la función para objetos constantes y no constantes.You can also overload a member function using the const keyword; this allows a different version of the function to be called for constant and nonconstant objects.

Los constructores o destructores no se pueden declarar con la const palabra clave.You cannot declare constructors or destructors with the const keyword.

funciones miembro constconst member functions

Al declarar una función miembro con la const palabra clave, se especifica que la función es una función de "solo lectura" que no modifica el objeto para el que se llama.Declaring a member function with the const keyword specifies that the function is a "read-only" function that does not modify the object for which it is called. Una función miembro constante no puede modificar los miembros de datos no estáticos ni llamar a funciones miembro que no sean constantes. Para declarar una función miembro constante, coloque la const palabra clave después del paréntesis de cierre de la lista de argumentos.A constant member function cannot modify any non-static data members or call any member functions that aren't constant.To declare a constant member function, place the const keyword after the closing parenthesis of the argument list. La const palabra clave es necesaria tanto en la declaración como en la definición.The const keyword is required in both the declaration and the definition.

// 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++ constC and C++ const differences

Cuando se declara una variable como const en un archivo de código fuente de C, se hace así:When you declare a variable as const in a C source code file, you do so as:

const int i = 2;

A continuación, esta variable se puede utilizar en otro módulo como sigue:You can then use this variable in another module as follows:

extern const int i;

Pero para obtener el mismo comportamiento en C++, debe declarar la const variable como:But to get the same behavior in C++, you must declare your const variable as:

extern const int i = 2;

Si desea declarar 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:If you wish to declare an extern variable in a C++ source code file for use in a C source code file, use:

extern "C" const int x=10;

para evitar que el compilador de C++ elimine nombres.to prevent name mangling by the C++ compiler.

ObservacionesRemarks

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.When following a member function's parameter list, the const keyword specifies that the function does not modify the object for which it is invoked.

Para obtener más información sobre const , vea los temas siguientes:For more information on const, see the following topics:

Consulta tambiénSee also

Palabras claveKeywords