Konstantní hodnoty
Klíčové slovo const určuje, že hodnota proměnné je konstantní a instruuje kompilátor, aby zabránil programátorovi v úpravách.
// constant_values1.cpp
int main() {
const int i = 5;
i = 10; // C3892
i++; // C2105
}
V jazyce C++ lze použít klíčové slovo const místo direktivy preprocesoru #define pro definování hodnot konstanty.Hodnoty definované pomocí const jsou předmětem kontroly typu a lze je použit místo konstantních výrazů.V jazyce C++ lze určit velikost pole 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é slovo const lze použít také v deklaracích ukazatelů.
// constant_values3.cpp
int main() {
char *mybuf = 0, *yourbuf;
char *const aptr = mybuf;
*aptr = 'a'; // OK
aptr = yourbuf; // C3892
}
Ukazatel na proměnnou definovaný 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
}
Výsledek
test
test
Odkazy 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 lze volat pouze funkce člena konstanty.Tím je zajištěno, že objekt konstanty nebude nikdy změněn.
birthday.getMonth(); // Okay
birthday.setMonth( 4 ); // Error
Pro nekonstantní objekt lze volat konstantní nebo členské funkce.Členskou funkci je také možné přetížit pomocí klíčového slova const. To umožňuje konstantním a nekonstantním objektům volat jinou verzi funkce.
Klíčovým slovem const nelze deklarovat konstruktory a destruktory.
Rozdíly u konstant v jazycích C a C++
Deklarace proměnné jako const je v souboru zdrojového kódu jazyka C provedena takto:
const int i = 2;
Následně je možné tuto proměnnou použít v jiném modulu takto:
extern const int i;
Je-li však požadováno stejné chování v jazyce C++, je třeba const deklarovat jako:
extern const int i = 2;
Je-li zapotřebí v souboru zdrojového kódu jazyka C++ deklarovat proměnnou extern pro použití v souboru zdrojového kódu jazyka C, je třeba použít:
extern "C" const int x=10;
pro zabránění v úpravě názvu kompilátorem jazyka C++.