2016-07-14 1 views

ответ

1

В соответствии со спецификацией C11 доступ к энергозависимой считается побочным эффектом, и, таким образом, компилятор не должен оптимизировать (в противном случае бесполезный) доступ в вашем примере.

Итак, ответ: да, он должен читать из памяти.

См стандарт C11 (проект), раздел 5.1.2.3 раздела 2:

Доступ летучий объект, изменение объекта, изменение файла или вызова функции, которая делает любой из этих операций все сторона эффекты, которые являются изменениями в состоянии выполнения среды. Оценка выражения в общем случае включает вычисления значений и инициирование побочных эффектов. Вычисление значения для выражения lvalue включает определение идентификатора объекта .

Далее, 4 говорит:

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

+0

«все выражения оцениваются как заданные семантикой» звуки, подобные одному выражению выражения, еще должны быть оценены, даже если результат никогда не идет нигде. – dronus

+0

По-прежнему стоит вопрос, если доступ для чтения считается побочным эффектом. – dronus

+0

@dronus, что? «Доступ к неустойчивому объекту ... [является побочным эффектом]« Кажется довольно ясным. – sinelaw

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