Я видел, что это можно сделать, но я не понимаю этого интереса.
Какова цель const_cast <> на изменчивой?
Ответ 1
Здесь доктор Статья Dobbs Андрея Александреску, которая содержит довольно непристойные подробности об этом.
Ответ 2
const
и volatile
являются ортогональными.
const
означает, что данные доступны только для чтения.
volatile
означает, что переменная может меняться из-за внешних причин, поэтому компилятор должен читать переменную из памяти каждый раз, когда она ссылается.
Таким образом, удаление const
позволяет вам писать то, что было в противном случае, доступным только для чтения (код должен иметь некоторые специальные знания, что местоположение фактически модифицируется). Вы не должны удалять volatile
, чтобы записать его, потому что вы можете вызвать поведение undefined (из-за 7.1.5.1/7 - If an attempt is made to refer to an object defined with a volatile-qualified type through the use of an lvalue
with a non-volatile-qualified type, the program behaviour is undefined.
)
Ответ 3
const
и volatile
звучат так, как будто они ссылаются на одну и ту же идею на переменную, но они этого не делают. A const
переменная не может быть изменена текущим кодом. A volatile
переменная может быть изменена каким-либо внешним объектом вне текущего кода. Возможно иметь переменную const volatile
- особенно что-то вроде зарегистрированного в памяти регистра - который изменяется на компьютере в то время, когда ваша программа не может предсказать, но что ваш код не может меняться напрямую. Вы можете использовать const_cast
для добавления или удаления const
или volatile
( "cv-qualification" ) к переменной.