Ответ 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.]
Это означает, что если ваш объект является экземпляром структуры, то компилятор не может избежать агрессивной оптимизации с участием объекта, , если не избегает агрессивной оптимизации каждого из его членов. (В противном случае, как еще можно избежать оптимизации с участием объекта?)
Связанная тема: