Какова цель 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" ) к переменной.