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: