const
и volatile
являются ортогональными.
const
означает, что данные доступны только для чтения.
volatile
означает, что переменная может изменяться по внешним причинам, поэтомукомпилятор должен читать переменную из памяти каждый раз, когда на нее ссылаются.
Таким образом, удаление const
позволяет записать то, что в противном случае было доступно только для чтения (код должен иметь некоторые специальные знания о том, что это местоположение на самом делеизменяемый).Вы не должны удалять volatile
, чтобы написать его, потому что вы можете вызвать неопределенное поведение (из-за 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.
)