Квалификатор const в С++

Квалификатор типов const (от анг. type qualifier) – зарезервированное ключевое слово в языке программирования С++, которое не даёт модифицировать значения переменных. Отсюда и возникло в программировании такое понятие, как константы или константные переменные, то есть неизменные. Необходимо запомнить, что при объявлении константы, её нужно инициализировать.

//Синтаксис объявления константы 
const  /*тип данных*/ /*имя переменной*/ =  /*инициализатор ( значение) */;  // объявление константной переменной

Объявление константной переменной от обычной переменной отличается ключевым словом const, которое ставится перед типом данных объявляемой переменной. Рассмотрим фрагмент кода объявления константной переменной.

// объявление и инициализация константной переменной типа int с именем value 
const int value = 8;

Была объявлена константа целого типа с именем value и инициализирована значением 8.  Если убрать инициализатор и откомпилировать программу, то компилятор выдаст ошибку похожую на эту (см. Рисунок 1).

квалификатор const в языке программирования С++

Рисунок 1- Квалификатор const в С++

В зависимости от компилятора сообщение об ошибке может быть другим, но суть ошибки не поменяется. Данное сообщение было сгенерировано компилятором MVS2010. Компилятор сообщает, что константную переменную value необходимо инициализировать.

Допустим мы захотели изменить значение в константе value, для этого дописали ниже строку, в которой переменной value присваивается значение .

// попытка изменить значение в конста value 
     const int value = 8; // объявление константы 
     value = 16; // присваиваем константе value значение 16

В этом случае, компилятор сгенерирует сообщение (см. Рисунок 2).

квалификатор const в C++

Рисунок 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).

CppStudio.com

*
Для продолжения нажмите любую клавишу . . .

Рисунок 3 — Квалификатор const в С++

Как видно из рисунка 3 условие оператора условного выбора if else истинно, так как напечаталась одна звёздочка. Хотя на первый взгляд кажется, что условие ложно. Так вот, дело в том, что в условии оператора if else вместо знака отношения == стоит знак присвоить. Переменной value присваивается значение 1. А как нам уже известно, что 1- это логическая истина. Если бы переменная value была объявлена как константа, то компилятор нам бы сразу сообщил о допущенной логической ошибке.

Когда пишутся большие программы, где тысячи строк кода, то такую ошибку будет очень сложно отследить. Таким образом, если нет необходимости изменять значение переменной, то лучше подстраховаться и объявить эту переменную как константу.

Практика

К сожалению, для данной темы пока нет подходящих задач. Если у вас есть таковые на примете, отправте их по адресу: admin@cppstudio.com. Мы их опубликуем!

Автор: admin
Дата: 25.08.2012
Поделиться:

Комментарии

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.