Найти тему
Жаркое лето ZZ-го

Язык С++. 7.6. Модификатор const.

Константы в С++ можно задавать двумя способами:

· с помощью директивы препроцессора #define. Например, строка

#define MILL 1000

задает символическое имя MILL для константы 1000. Препроцессор всюду в тексте заменяет это имя на константу 1000, используя текстовую подстановку. Но есть один нюанс - отсутствует контроль типов, а это потенциальный источник ошибок;

· с ключевого слова const. Например, вместо #define можно использовать следующее описание:

const int MILL = 1000;

Модификатор const означает, что переменная MILL является константой, т.е. менять ее значение нельзя. Попытка присвоить новое значение константе приведет к ошибке компиляции:

MILL = 100; // Ошибка: константу нельзя изменять

При описании указателя модификатор const, записанный до звездочки, означает, что описан указатель на константный объект, т.е. на объект, менять который нельзя или запрещено. Например, в строке

const char *p;

описан указатель на константную строку (массив символов, менять который запрещено).

Указатели на константные объекты используются в С очень часто. Причина состоит в том, что константный указатель позволяет прочесть объект и при этом гарантирует, что объект не будет изменён из-за ошибки программирования, т.к. константный указатель не дает возможности изменить объект.

Константный указатель ссылается на константный объект, однако, содержимое самого указателя может изменяться. Например, следующий фрагмент вполне корректен:

const char *str = "e2e4";

. . .

str = "c7c5";

Здесь константный указатель str сначала содержит адрес константной строки "e2e4". Затем в него записывается адрес другой константной строки "c7c5".

В С можно также описать указатель, значение которого не может быть изменено; для этого модификатор const указывается после звездочки. Например, фрагмент кода

int i;

int * const p = &i;

на века записывает в указатель p адрес переменной i, перенаправить указатель p на другую переменную уже нельзя. Строка

p = &n;

является ошибкой, т.к. указатель p - константа, а константе нельзя присвоить новое значение. Указатели, значения которых изменять нельзя, используются в С значительно реже, в основном при заполнении константных таблиц.