const
(C++)
Když upraví deklaraci dat, klíčové slovo určuje, const
že objekt nebo proměnná není možné upravit.
Syntaxe
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
Rozhodnout
noptr-declarator
parameters-and-qualifiers
noptr-declarator
[
constant-expression
opt opt]
attribute-specifier-seq
(
ptr-declarator
)
parameters-and-qualifiers
:
(
parameter-declaration-clause
)
cv-qualifier-seq
Rozhodnout
ref-qualifier
optnoexcept-specifier
optattribute-specifier-seq
trailing-return-type
:
->
type-id
ptr-operator
:
*
attribute-specifier-seq
opt optcv-qualifier-seq
&
attribute-specifier-seq
Rozhodnout
&&
attribute-specifier-seq
Rozhodnout
nested-name-specifier
*
attribute-specifier-seq
opt optcv-qualifier-seq
cv-qualifier-seq
:
cv-qualifier
cv-qualifier-seq
Rozhodnout
cv-qualifier
:
const
volatile
ref-qualifier
:
&
&&
declarator-id
:
...
Rozhodnoutid-expression
const
Hodnoty
Klíčové const
slovo určuje, že hodnota proměnné je konstantní a říká kompilátoru, aby zabránil programátorovi v jeho úpravě.
// constant_values1.cpp
int main() {
const int i = 5;
i = 10; // C3892
i++; // C2105
}
V jazyce C++ můžete místo direktivy preprocesoru const
použít klíčové slovo #define
k definování konstantních hodnot. Hodnoty definované const
pomocí kontroly typů se dají použít místo konstantních výrazů. V jazyce C++ můžete zadat velikost pole s proměnnou const
následujícím způsobem:
// constant_values2.cpp
// compile with: /c
const int maxarray = 255;
char store_char[maxarray]; // allowed in C++; not allowed in C
V jazyce C směřují výchozí hodnoty konstant na externí propojení tak, aby se mohly zobrazit pouze ve zdrojových souborech. V jazyce C++ směřují výchozí hodnoty konstant na vnitřní propojení tak, aby se mohly zobrazit pouze v rámci souborů hlaviček.
Klíčové const
slovo lze použít také v deklaracích ukazatelů.
// 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
}
Ukazatel na proměnnou deklarovanou jako const
lze přiřadit pouze ukazateli, který je také deklarován jako 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
}
Ukazatele na data konstanty lze použít jako parametry funkce pro zabránění úpravy parametru předaného prostřednictvím ukazatele.
Pro objekty, které jsou deklarovány jako const
, můžete volat pouze konstantní členské funkce. Kompilátor zajišťuje, že konstantní objekt není nikdy změněn.
birthday.getMonth(); // Okay
birthday.setMonth( 4 ); // Error
Pro objekt, který není konstantní, můžete volat konstantní nebo nekontinutní členské funkce. Členovou funkci můžete také přetížit pomocí klíčového const
slova. Tato funkce umožňuje volat jinou verzi funkce pro konstantní a ne constantní objekty.
Pomocí klíčového const
slova nelze deklarovat konstruktory ani destruktory.
const
členské funkce
Deklarování členské funkce pomocí klíčového const
slova určuje, že tato funkce je "jen pro čtení", která neupravuje objekt, pro který je volána. Konstantní členová funkce nemůže upravovat žádné nestatické datové členy ani volat žádné členské funkce, které nejsou konstantní. Chcete-li deklarovat konstantní členovou funkci, umístěte const
klíčové slovo za pravou závorku seznamu argumentů. Klíčové const
slovo je vyžadováno v deklaraci i definici.
// 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
}
Rozdíly v jazyce C a C++ const
Když definujete proměnnou const
v souboru zdrojového kódu jazyka C, provedete to takto:
const int i = 2;
Následně je možné tuto proměnnou použít v jiném modulu takto:
extern const int i;
Pokud ale chcete získat stejné chování v jazyce C++, musíte definovat proměnnou const
takto:
extern const int i = 2;
Podobně jako v jazyce C můžete tuto proměnnou použít v jiném modulu následujícím způsobem:
extern const int i;
Pokud chcete definovat proměnnou extern
v souboru zdrojového kódu C++ pro použití v souboru zdrojového kódu jazyka C, použijte:
extern "C" const int x=10;
pro zabránění v úpravě názvu kompilátorem jazyka C++.
Poznámky
Při sledování seznamu parametrů členské funkce určuje klíčové slovo, že funkce neupravuje objekt, const
pro který je vyvolán.
Další informace najdete const
v následujících článcích:
Viz také
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro