Делает ли система волатильностью все ее члены неустойчивыми?
Если у меня есть:
struct whatever {
int data;
};
volatile whatever test;
будет test.data слишком изменчивым?
Ответ 1
Можно задать другой вопрос (или просто другой способ посмотреть исходный вопрос):
Делает ли struct const все ее члены const?
Если у меня есть:
struct whatever { int data; };
const whatever test;
Будет ли test.data быть const тоже?
Мой ответ: Да. Если вы объявите объект типа whatever с const, то все его члены будут const слишком
Аналогично, если вы объявляете объект типа whatever с volatile, тогда все его члены будут volatile тоже, как если бы вы объявили объект с const, все его члены будут const тоже.
const и volatile - две грани одной и той же монеты; они так, что стандарт часто ссылается на них как cv-qualifiers.
Цитата из Стандарта ($ 7.1.5.1/8)
[Примечание: volatile - это подсказка для реализации, чтобы избежать агрессивных оптимизация с участием объектапотому что значение объекта может быть изменено с помощью средств, не поддающихся обнаружению реализация. См. 1.9 для подробного семантика. В общем, семантика летучих являются то же самое в C + +, как и в C.]
Это означает, что если ваш объект является экземпляром структуры, то компилятор не может избежать агрессивной оптимизации с участием объекта, , если не избегает агрессивной оптимизации каждого из его членов. (В противном случае, как еще можно избежать оптимизации с участием объекта?)