Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Quando modifica uma declaração de dados, a const palavra-chave especifica que o objeto ou variável não é modificável.
Sintaxe
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 const
A const palavra-chave especifica que o valor de uma variável é constante e informa ao compilador para impedir que o programador o modifique.
// constant_values1.cpp
int main() {
const int i = 5;
i = 10; // C3892
i++; // C2105
}
No C++, você pode usar a const palavra-chave em vez da diretiva de #define pré-processador para definir valores constantes. Os valores definidos com const estão sujeitos à verificação de tipo e podem ser usados no lugar de expressões constantes. No C++, você pode especificar o tamanho de uma matriz com uma const variável da seguinte maneira:
// constant_values2.cpp
// compile with: /c
const int maxarray = 255;
char store_char[maxarray]; // allowed in C++; not allowed in C
Em C, os valores constantes são padrão para a vinculação externa, para que possam aparecer apenas em arquivos de origem. No C++, os valores constantes são padrão para a vinculação interna, o que permite que eles apareçam em arquivos de cabeçalho.
A const palavra-chave também pode ser usada em declarações de ponteiro.
// 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
}
Um ponteiro para uma variável declarada como const pode ser atribuído apenas a um ponteiro que também é declarado 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
}
Você pode usar ponteiros para dados constantes como parâmetros de função para impedir que a função modifique um parâmetro passado por um ponteiro.
Para objetos declarados como const, você só pode chamar funções de membro constante. O compilador garante que o objeto constante nunca seja modificado.
birthday.getMonth(); // Okay
birthday.setMonth( 4 ); // Error
Você pode chamar funções de membro constantes ou não constantes para um objeto não constante. Você também pode sobrecarregar uma função membro usando a const palavra-chave; esse recurso permite que uma versão diferente da função seja chamada para objetos constantes e não constantes.
Você não pode declarar construtores ou destruidores com a const palavra-chave.
const funções de membro
Declarar uma função membro com a const palavra-chave especifica que a função é uma função "somente leitura" que não modifica o objeto para o qual ela é chamada. Uma função membro constante não pode modificar membros de dados não estáticos ou chamar quaisquer funções membro que não sejam constantes. Para declarar uma função de membro constante, coloque a const palavra-chave após o parêntese de fechamento da lista de argumentos. A const palavra-chave é necessária tanto na declaração quanto na definição.
// 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
}
Diferenças de C e C++ const
Ao definir uma const variável em um arquivo de código-fonte C, faça isso como:
const int i = 2;
Em seguida, você pode usar essa variável em outro módulo da seguinte maneira:
extern const int i;
Mas para obter o mesmo comportamento em C++, você deve definir sua const variável como:
extern const int i = 2;
Semelhante a C, você pode usar essa variável em outro módulo da seguinte maneira:
extern const int i;
Se você quiser definir uma extern variável em um arquivo de código-fonte C++ para uso em um arquivo de código-fonte C, use:
extern "C" const int x=10;
para impedir o mangling de nome pelo compilador C++.
Observações
Ao seguir a lista de parâmetros de uma função membro, a const palavra-chave especifica que a função não modifica o objeto para o qual ela é invocada.
Para obter mais informações sobre const, consulte os seguintes artigos: