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