const
(C++)
Ao modificar uma declaração de dados, a palavra-chave const
especifica que o objeto ou a variável não é modificável.
Sintaxe
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
opt
noptr-declarator
parameters-and-qualifiers
noptr-declarator
[
constant-expression
opt]
attribute-specifier-seq
opt
(
ptr-declarator
)
parameters-and-qualifiers
:
(
parameter-declaration-clause
)
cv-qualifier-seq
opt
ref-qualifier
optnoexcept-specifier
optattribute-specifier-seq
opt
trailing-return-type
:
->
type-id
ptr-operator
:
*
attribute-specifier-seq
optcv-qualifier-seq
opt
&
attribute-specifier-seq
opt
&&
attribute-specifier-seq
opt
nested-name-specifier
*
attribute-specifier-seq
optcv-qualifier-seq
opt
cv-qualifier-seq
:
cv-qualifier
cv-qualifier-seq
opt
cv-qualifier
:
const
volatile
ref-qualifier
:
&
&&
declarator-id
:
...
optid-expression
Valores const
A palavra-chave const
especifica que um valor de variável é constante e informa o compilador para impedir que o programador a modifique.
// constant_values1.cpp
int main() {
const int i = 5;
i = 10; // C3892
i++; // C2105
}
Em C++, você pode usar a palavra-chave const
em vez de política de pré-processador #define
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. Em C++, você pode especificar o tamanho de uma matriz com uma variável const
como a seguir:
// 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 usam como padrão o vínculo externo, assim eles podem aparecer somente em arquivos de origem. Em C++, os valores constantes usam como padrão o vínculo interno, que permite que eles apareçam em arquivos de cabeçalho.
A palavra-chave const
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 a um ponteiro que é declarado também 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 os dados constantes como parâmetros de função para evitar que a função modifique um parâmetro passado por um ponteiro.
Para os objetos declarados como const
, você poderá chamar apenas funções de membro constantes. O compilador assegura que o objeto constante nunca seja modificado.
birthday.getMonth(); // Okay
birthday.setMonth( 4 ); // Error
Você pode chamar funções membro constantes ou não constantes para um objeto não constante. Você também pode sobrecarregar uma função membro usando a palavra-chave const
; isso 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 palavra-chave const
.
const
Funções de membro
A declaração de uma função membro com a palavra-chaveconst
especifica que aquela é uma função “somente leitura” que não modifica o objeto para o qual é chamada. Uma função membro constante não pode alterar membros de dados não estáticos ou chamar qualquer função membro que não seja uma constante. Para declarar uma função membro como constante, coloque a palavra-chave const
depois do parêntese de fechamento da lista de argumentos. A palavra-chave const
é necessária na declaração e 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, você faz isso como:
const int i = 2;
Então, você pode usar essa variável em outro módulo como segue:
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 ao C, você pode usar essa variável em outro módulo da seguinte maneira:
extern const int i;
Se você deseja 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 evitar a desconfiguração do nome pelo compilador C++.
Comentários
Após a lista de parâmetros de uma função membro, a palavra-chave const
especifica que a função não modifica o objeto para o qual é chamada.
Para obter mais informações em const
, confira os seguintes artigos:
Confira também
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de