Storage qualifiers в C++ — это ключевые слова, которые указывают, как переменные должны храниться в памяти и как их можно изменять. Они контролируют права доступа и поведение памяти для переменных, указателей и членов класса.
const указывает, что значение переменной нельзя изменить после инициализации. После присваивания компилятор будет блокировать любые попытки изменить переменную. Это полезно для определения констант и защиты данных от непредусмотренных изменений.
volatile указывает, что значение переменной может изменяться вне контроля программы — обычно из-за внешнего оборудования или асинхронных операций. Например, указатель на регистр оборудования, содержащий системное время, может быть изменён самим оборудованием, а не кодом программы.
Основная цель volatile — предотвратить оптимизацию компилятором обращений к памяти. Без этого квалификатора компилятор мог бы закэшировать значение в регистр и не обращаться к реальному адресу в памяти для проверки обновлений.
mutable позволяет изменять конкретный член класса или структуры даже когда родительский объект объявлен как const. Это полезно, когда тебе нужно менять определённые внутренние поля (вроде кэшей или счётчиков), не нарушая логическую константность объекта.
struct Employee {
char name[80];
mutable double salary;
};
const Employee emp = {"John", 50000};
emp.salary = 55000; // Разрешено - mutable член
strcpy(emp.name, "Jane"); // Ошибка компилятора - non-mutable член
В этом примере salary можно изменить, потому что он объявлен как mutable, а name менять нельзя, потому что весь объект Employee объявлен как const.
Квалификатор volatile запрещает компилятору оптимизировать обращения к памяти переменной, обеспечивая проверку реального адреса в памяти при каждом чтении переменной.
Новый — ещё не проверен сообществом
Вы