LINUX.ORG.RU

История изменений

Исправление xaizek, (текущая версия) :

компилятор не может предполагать, что член класса не будет изменен где-то снаружи.

А ему и не нужно предполагать. Он может это знать. Если на участке кода всё было встроенно и никакой неизвестный код не вызываеся, то незаметное изменение значения поля может быть исключено, хоть и не всегда. Например, с полем bool и наличием указателя на bool в аргументах и записью в этот bool strict-aliasing убъёт эту оптимизацию. Но в общем случае никаких гарантий на отсутствие оптимизаций из-за косвенности через указатель на агрегат нет.

Исходная версия xaizek, :

компилятор не может предполагать, что член класса не будет изменен где-то снаружи.

А ему и не нужно предполагать. Он может это знать. Если на участке кода всё было встроенно и никакой неизвестный код не вызываеся, то незаметное изменение значения поля может быть исключено, хоть и не всегда. Например, с полем bool и наличием указателя на bool в аргументах strict-aliasing убъёт эту оптимизацию. Но в общем случае никаких гарантий на отсутствие оптимизаций из-за косвенности через указатель на агрегат нет.