Какова цель const_cast <> для volatile? - PullRequest
11 голосов
/ 13 июня 2010

Я видел, что это можно было сделать, но я не понимаю интереса.

Ответы [ 3 ]

23 голосов
/ 13 июня 2010

Вот вам Доктор.Статья Андрея Александреску Dobbs , которая довольно подробно описывает это.

4 голосов
/ 13 июня 2010

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.)

3 голосов
/ 13 июня 2010

const и volatile звучат так, как будто они относятся к одной и той же идее для переменной, но это не так.Переменная const не может быть изменена текущим кодом.Переменная volatile может быть изменена каким-либо внешним объектом за пределами текущего кода.Возможно иметь переменную const volatile - особенно что-то вроде регистра с отображением памяти - который будет изменен компьютером в то время, когда ваша программа не может предсказать, но ваш код не может изменяться напрямую.Вы можете использовать const_cast для добавления или удаления const или volatile ("cv-qualification") к переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...