Почему объект volatile не может вызвать функцию-не-1002 *?
volatile
В случае const имеет смысл, что вызов функции-не-1006 * нарушает постоянство объекта и, следовательно, это запрещено.Но почему в случае volatile?
const
В случае const имеет смысл, что вызов неконстантной функции-члена нарушает константность объекта и, следовательно, это запрещено. Но почему в случае летучих?
Это то же самое для изменчивых. Изменчивый означает, что каждый доступ к объекту является видимым побочным эффектом и не может быть устранен. Если бы вы вызвали энергонезависимый метод для энергозависимого объекта, вы бы нарушили это свойство (поскольку энергонезависимый метод будет обрабатывать объект как обычный объект). Следовательно, это невозможно.
Из стандарта:
7.1.5.1.Если предпринята попытка обратиться к объекту, определенному с типом volatile-quailified посредством использования lvalue с типом volatile-quailified, поведение программы не определено.
I'mугадывая ваш компилятор выдает ошибку, чтобы предотвратить неопределенное поведение.Стандартное изложение должно быть достаточной причиной.
Спецификатор volatile работает так же, как и const.Чтобы увидеть , что можно сделать благодаря этому, взгляните на эту статью Александреску .Эта статья также должна дать вам некоторое представление о , почему .