Квалификатор типов const
(от анг. type qualifier) – зарезервированное ключевое слово в языке программирования С++, которое не даёт модифицировать значения переменных. Отсюда и возникло в программировании такое понятие, как константы или константные переменные, то есть неизменные. Необходимо запомнить, что при объявлении константы, её нужно инициализировать.
//Синтаксис объявления константы const /*тип данных*/ /*имя переменной*/ = /*инициализатор ( значение) */; // объявление константной переменной
Объявление константной переменной от обычной переменной отличается ключевым словом const
, которое ставится перед типом данных объявляемой переменной. Рассмотрим фрагмент кода объявления константной переменной.
// объявление и инициализация константной переменной типа int с именем value const int value = 8;
Была объявлена константа целого типа с именем value
и инициализирована значением 8. Если убрать инициализатор и откомпилировать программу, то компилятор выдаст ошибку похожую на эту (см. Рисунок 1).
Рисунок 1- Квалификатор const в С++
В зависимости от компилятора сообщение об ошибке может быть другим, но суть ошибки не поменяется. Данное сообщение было сгенерировано компилятором MVS2010. Компилятор сообщает, что константную переменную value
необходимо инициализировать.
Допустим мы захотели изменить значение в константе value
, для этого дописали ниже строку, в которой переменной value
присваивается значение .
// попытка изменить значение в конста value const int value = 8; // объявление константы value = 16; // присваиваем константе value значение 16
В этом случае, компилятор сгенерирует сообщение (см. Рисунок 2).
Рисунок 2 — Квалификатор const в С++
Как видно из рисунка 2 нам не удалось изменить значение в переменной value
. Вот в этом и заключается суть квалификатора const
, а именно, как уже выше было сказано, квалификатор const
не даёт модифицировать значение переменной, потому-то такие переменные и называются константами. Но всё это было предопределено, программистом, который писал этот фрагмент кода. То есть мы специально пытались перезаписать значение в переменной value
, тогда какой смысл в квалификаторе const
, если специально не пытаться изменить значение константы? А смысл такой, что квалификатор const
предотвращает случайное изменение значений переменных. Случайное изменение значений не только возможно, но и трудно заметно. В итоге, программа сработала, а результат работы программы получился неправильный. Чаще всего случайное изменение значений переменных происходит из-за логических ошибок. Например, рассмотрим фрагмент кода, в котором есть скрытая логическая ошибка.
int value = 8; if (value = 1 ) // логическая ошибка в этой строке cout << "*" << endl; else cout << "********" << endl;
В строке 1 объявлена, переменна целого типа, но не константная. В строке 2 проверяется условие в операторе условного выбора if else
. От того какое условие, истинное или ложное, выполнится третья или пятая строка. Результат работы программы (см. Рисунок 3).
*
Для продолжения нажмите любую клавишу . . .
Рисунок 3 — Квалификатор const в С++
Как видно из рисунка 3 условие оператора условного выбора if else
истинно, так как напечаталась одна звёздочка. Хотя на первый взгляд кажется, что условие ложно. Так вот, дело в том, что в условии оператора if else
вместо знака отношения ==
стоит знак присвоить. Переменной value
присваивается значение 1. А как нам уже известно, что 1- это логическая истина. Если бы переменная value
была объявлена как константа, то компилятор нам бы сразу сообщил о допущенной логической ошибке.
Когда пишутся большие программы, где тысячи строк кода, то такую ошибку будет очень сложно отследить. Таким образом, если нет необходимости изменять значение переменной, то лучше подстраховаться и объявить эту переменную как константу.
Комментарии