Стандарт C ++ 03 1.9 / 6 определяет наблюдаемое поведение:
Наблюдаемое поведение абстрактной машины — это последовательность операций чтения и записи в изменчивые данные и обращения к функциям ввода-вывода библиотеки.
а затем и затем 1.9 / 7 определяет побочные эффекты:
Доступ к объекту, обозначенному как volatile lvalue (3.10), изменение объекта, вызов функции библиотечного ввода-вывода или вызов функции, выполняющей любую из этих операций, — все это побочные эффекты, которые являются изменениями в состоянии среды выполнения.
Является ли побочный эффект наблюдаемым поведением или нет? Как они связаны друг с другом?
Нет, побочный эффект не обязательно является наблюдаемым поведением. Например, изменение энергонезависимого объекта является побочным эффектом, но не наблюдается. Разница имеет значение, потому что побочные эффекты могут быть перекомпонованы или удалены компилятором, если наблюдаемое поведение остается тем же.
int main()
{
int a;
a = 30;
a += 2;
return 0;
}
Большинство компиляторов по запросу удаляют a
полностью. Это разрешено Назначения и дополнения не наблюдаются.
Все наблюдаемое поведение обязательно должно быть побочным эффектом.
Других решений пока нет …