Константи C++. Якщо змінна оголошена з ключовим словом const, це означає, що її значення не повинне змінюватись.
const int j = 13; // Константа типу int j = 45; // Помилка. Не можна змінювати значення const int i; // Помилка. відсутнє початкове значення константи.
Константу можна визначити ще і традиційним способом, за допомогою директиви #define, наприклад:
#define five 5
Визначення констант за допомогою const і #define не є еквівалентними. Перший спосіб визначає змінну, яка займає деяку область пам'яті, а другий спосіб - макрос. Зверніть увагу, що константа five не має ніякого конкретного типу (int, char, і т.д.). Директива #define виконує просту текстову заміну. Кожен раз, коли препроцесор зустрічає слово five, він замінює його літералом 5. Оскільки препроцесор запускається перед компілятором, останній ніколи не дізнається про цю константу, а буде бачити лише число 5.
Константи в перерахуваннях
В перерахуваннях (enum) імена констант мають глобальну область дії і дуже швидко захаращують простір імен, тому їх зазвичай обмежують класом або структурою.
class Foo { public: enum Status { kOpen = 1, kClosed };
// Десь у програмі Foo::Status s = Foo::kOpen;
Зверніть увагу — область дії повинна бути явно вказана як в імені типу, так і в символічному імені. Отже, символічні імена kOpen і kClosed можна використовувати в програмі без великої ймовірності, що такі імена повторяться. Компілятор розглядає символічні імена перерахувань як макроси, а не як константні змінні.
Вказівник на константу
При роботі з вказівниками на константу, слід враховувати два значення: адресу і вміст пам'яті по цій адресі. При створені вказівника на константу, адреса, що зберігається в вказівнику може змінюватися, але вміст пам'яті по цьому адресу - ні. Приклад:
const int* p; // Вказівник на константу int i = 17; p = &i; *p = 29; // Помилка
Константний вказівник
З константними вказівниками все навпаки: адресу змінювати не можна, але можна змінювати вміст пам'яті за цією адресою.
int i = 17; int j = 29; int* const p; // Помилка! Необхідно задати початкове значення int* const p1 = &i; *p1 = 29; p1 = &j; //Помилка
Константний вказівник на константу
Це незмінна адреса незмінної величини.
int i = 17; int j = 29; const int* const p; // Помилка const int* const p1 = &i; // Можна *p1 = 29; // Помилка p1 = &j; // Помилка