Описание тега constants

Константы в программировании - это определения, значение которых фиксируется на протяжении всего выполнения программы. Например, литералы в большинстве языков являются константами. В ссылочно прозрачных стилях программирования все определения постоянны. Константная область хранения данных (объект, поле, переменная, параметр) - это область, которая "никогда не изменяется", что позволяет проводить дополнительную оптимизацию генератора кода и дополнительную статическую проверку правильности программы.

В информатике константная корректность - это форма корректности программы, которая имеет дело с правильным объявлением объектов как изменяемых или неизменяемых. Этот термин в основном используется в контексте C или C++ и получил свое название отconst ключевое слово на этих языках.

Идея const-ness не означает, что переменная, хранящаяся в памяти компьютера, не может быть перезаписана. Скорее,const-ness - это конструкция времени компиляции, которая указывает, что может делать программист, не обязательно то, что он может делать.

Кроме того, метод можно объявить как const. В этом случаеthis указатель внутри такого метода имеет const ThisClass* const тип, а не ThisClass* constтип. Это означает, что не-constметоды для этого объекта нельзя вызывать изнутри такого метода, а также нельзя изменять переменные-члены. В C++ переменная-член может быть объявлена ​​какmutable, что указывает на то, что это ограничение на него не распространяется. В некоторых случаях это может быть полезно, например, при кэшировании, подсчете ссылок и синхронизации данных. В этих случаях логическое значение (состояние) объекта не изменяется, но объект не является физически постоянным, поскольку его побитовое представление может измениться.

Стандарт C++11 добавляет дополнительные примечания к значению const при использовании в Стандартной библиотеке в отношении доступа к потокам и возможных модификаций тех const объекты.

Подробнее о корректности const здесь.