Константи 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; // Помилка