почему энергозависимый объект не может вызывать энергонезависимую функцию-член - PullRequest
6 голосов
/ 08 ноября 2011

Почему объект volatile не может вызвать функцию-не-1002 *?

В случае const имеет смысл, что вызов функции-не-1006 * нарушает постоянство объекта и, следовательно, это запрещено.Но почему в случае volatile?

Ответы [ 3 ]

5 голосов
/ 08 ноября 2011

В случае const имеет смысл, что вызов неконстантной функции-члена нарушает константность объекта и, следовательно, это запрещено. Но почему в случае летучих?

Это то же самое для изменчивых. Изменчивый означает, что каждый доступ к объекту является видимым побочным эффектом и не может быть устранен. Если бы вы вызвали энергонезависимый метод для энергозависимого объекта, вы бы нарушили это свойство (поскольку энергонезависимый метод будет обрабатывать объект как обычный объект). Следовательно, это невозможно.

4 голосов
/ 08 ноября 2011

Из стандарта:

7.1.5.1.Если предпринята попытка обратиться к объекту, определенному с типом volatile-quailified посредством использования lvalue с типом volatile-quailified, поведение программы не определено.

I'mугадывая ваш компилятор выдает ошибку, чтобы предотвратить неопределенное поведение.Стандартное изложение должно быть достаточной причиной.

2 голосов
/ 08 ноября 2011

Спецификатор volatile работает так же, как и const.Чтобы увидеть , что можно сделать благодаря этому, взгляните на эту статью Александреску .Эта статья также должна дать вам некоторое представление о , почему .

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