const
(C++)
Quando modifica una dichiarazione di dati, la const
parola chiave specifica che l'oggetto o la variabile non è modificabile.
Sintassi
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 opt opt]
attribute-specifier-seq
(
ptr-declarator
)
parameters-and-qualifiers
:
(
parameter-declaration-clause
)
cv-qualifier-seq
opt
ref-qualifier
optnoexcept-specifier
optattribute-specifier-seq
trailing-return-type
:
->
type-id
ptr-operator
:
*
attribute-specifier-seq
opt opt optcv-qualifier-seq
&
attribute-specifier-seq
opt
&&
attribute-specifier-seq
opt
nested-name-specifier
*
attribute-specifier-seq
opt opt optcv-qualifier-seq
cv-qualifier-seq
:
cv-qualifier
cv-qualifier-seq
opt
cv-qualifier
:
const
volatile
ref-qualifier
:
&
&&
declarator-id
:
...
optid-expression
Valori const
La const
parola chiave specifica che il valore di una variabile è costante e indica al compilatore di impedire al programmatore di modificarlo.
// constant_values1.cpp
int main() {
const int i = 5;
i = 10; // C3892
i++; // C2105
}
In C++, è possibile usare la const
parola chiave anziché la direttiva del #define
preprocessore per definire i valori costanti. I valori definiti con const
sono soggetti al controllo dei tipi e possono essere usati al posto di espressioni costanti. In C++, è possibile specificare le dimensioni di una matrice con una const
variabile come indicato di seguito:
// constant_values2.cpp
// compile with: /c
const int maxarray = 255;
char store_char[maxarray]; // allowed in C++; not allowed in C
In C l'impostazione predefinita dei valori costanti è il collegamento esterno, in modo che possano essere visualizzati solo nei file di origine. In C++ l'impostazione predefinita dei valori costanti è il collegamento interno che consente di visualizzarli nei file di intestazione.
La const
parola chiave può essere usata anche nelle dichiarazioni del puntatore.
// 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 puntatore a una variabile dichiarata come const
può essere assegnato solo a un puntatore dichiarato anche come 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
}
È possibile utilizzare i puntatori ai dati costanti come parametri di funzione per impedire alla funzione di modificare un parametro passato tramite un puntatore.
Per gli oggetti dichiarati come const
, è possibile chiamare solo funzioni membro costanti. Il compilatore garantisce che l'oggetto costante non venga mai modificato.
birthday.getMonth(); // Okay
birthday.setMonth( 4 ); // Error
È possibile chiamare funzioni membro costanti o non costanti per un oggetto non costante. È anche possibile eseguire l'overload di una funzione membro usando la const
parola chiave . Questa funzionalità consente di chiamare una versione diversa della funzione per gli oggetti costanti e non costanti.
Non è possibile dichiarare costruttori o distruttori con la const
parola chiave .
const
funzioni membro
La dichiarazione di una funzione membro con la const
parola chiave specifica che la funzione è una funzione di sola lettura che non modifica l'oggetto per cui viene chiamato. Una funzione membro costante non può modificare membri dati non statici o chiamare funzioni membro che non sono costanti. Per dichiarare una funzione membro costante, posizionare la const
parola chiave dopo la parentesi di chiusura dell'elenco di argomenti. La const
parola chiave è obbligatoria sia nella dichiarazione che nella definizione.
// 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
}
Differenze tra C e C++ const
Quando si definisce una const
variabile in un file di codice sorgente C, è necessario:
const int i = 2;
È quindi possibile usare questa variabile in un altro modulo come segue:
extern const int i;
Tuttavia, per ottenere lo stesso comportamento in C++, è necessario definire la const
variabile come:
extern const int i = 2;
Analogamente a C, è quindi possibile usare questa variabile in un altro modulo come indicato di seguito:
extern const int i;
Se si vuole definire una extern
variabile in un file di codice sorgente C++ da usare in un file di codice sorgente C, usare:
extern "C" const int x=10;
per impedire l'alterazione del nome del compilatore C++.
Osservazioni:
Quando si segue l'elenco di parametri di una funzione membro, la const
parola chiave specifica che la funzione non modifica l'oggetto per cui viene richiamato.
Per altre informazioni su const
, vedere gli articoli seguenti:
Vedi anche
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per