Я видел, что было возможно сделать это, но я не понимаю интереса.
Вот Dr. Статья Доббса Андрея Александреску, в которой содержится довольно непристойное количество деталей.
const
и volatile
ортогональны.
const
означает, что данные доступны только для чтения.
volatile
означает, что переменная может изменяться по внешним причинам, поэтому компилятору необходимо читать переменную из памяти при каждом обращении к ней.
Таким образом, удаление const
позволяет вам записать то, что в противном случае было местоположением только для чтения (код должен обладать некоторыми специальными знаниями о том, что местоположение действительно может быть изменено). Вы не должны удалять volatile
, чтобы записать его, потому что это может привести к неопределенному поведению (из-за 7.1.5.1/7 - , если будет сделана попытка обратиться к объекту, определенному с типом, квалифицированным volatile. через использование lvalue
с энергонезависимым типом поведение программы не определено.
)
const
и volatile
звучат так, как будто они относятся к одной и той же идее для переменной, но это не так. Переменная const
не может быть изменена текущим кодом. Неустойчивая переменная
может быть изменена каким-либо внешним объектом вне текущего кода. Возможно иметь переменную const volatile
- особенно что-то вроде отображаемого в память регистра - которая изменяется компьютером в то время, когда ваша программа не может предсказать, но ваш код не может изменяться напрямую. Вы можете использовать const_cast
, чтобы добавить или удалить const
или volatile
(«cv-qualification») в переменную.