Если у меня есть:
 struct whatever {
int data;
};
volatile whatever test;
будет test.data слишком изменчивым?Если у меня есть:
 struct whatever {
int data;
};
volatile whatever test;
будет test.data слишком изменчивым?Можно задать другой вопрос (или просто другой способ посмотреть исходный вопрос):
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.]
Это означает, что если ваш объект является экземпляром структуры, то компилятор не может избежать агрессивной оптимизации с участием объекта, , если не избегает агрессивной оптимизации каждого из его членов. (В противном случае, как еще можно избежать оптимизации с участием объекта?)
Связанная тема:
От: http://msdn.microsoft.com/en-us/library/145yc477%28v=vs.80%29.aspx
Чтобы объявить объект, на который указывает указатель как const или volatile, используйте объявление формы:
const char *cpch;
volatile char *vpch;
Чтобы объявить значение указателя, то есть фактический адрес, сохраненный в указателе, - как const или volatile, использует объявление формы:
char * const pchc;
char * volatile pchv;