2011-11-08 10 views
5

Почему объект volatile не может использовать функцию-член volatile?Почему не может изменяться функция волатильного объекта с функцией энергонезависимой функции

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

+1

Поскольку вы пытаетесь нарушить изменчивость ... –

+2

, и я только что заметил анаграмму –

ответ

4

В случае сопзЬ имеет смысл, что вызов функции неконстантного члена нарушает конструкцию объекта и, следовательно, запрещается. Но почему в случае летучих?

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

2

Отборщик volatile работает так же, как const работ. Чтобы увидеть , что можно сделать, взгляните на this Alexandrescu article. Эта статья также должна дать вам некоторое представление о , почему.

+0

, это статья 2001 года, и теперь все, что я прочитал, это люди, которые советуют избегать волатильности для критических секций/многопоточных целей и предпочитают использовать мьютексы , Например: https://www.securecoding.cert.org/confluence/display/seccode/POS03-C.+Do+not+use+volatile+as+a+synchronization+primitive – Nikko

+0

@Nikko: Кажется, вы не " t больше, чем название статьи, на которую ссылается ответ. Прочитайте * полную * статью. – ybungalobill

4

От стандарта:

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

Я предполагаю, что ваши сообщения компилятора содержат ошибку, чтобы предотвратить неопределенное поведение. Стандартная формулировка так должна быть достаточной.

+0

Я думаю, что вопрос «почему» –

+0

хороший вывод из спецификации. – iammilind

+0

@ TomalakGeret'kal, потому что стандарт говорит так :) –

 Смежные вопросы

  • Нет связанных вопросов^_^