Подтвердить что ты не робот

Каковы побочные эффекты и наблюдаемое поведение, связанные с С++?

С++ 03 Стандарт 1.9/6 определяет наблюдаемое поведение:

Наблюдаемое поведение абстрактной машины - это ее последовательность чтения и записи в энергозависимые данные и вызовы функций библиотечного ввода-вывода.

а затем и затем 1.9/7 определяют побочные эффекты:

Доступ к объекту, обозначенному изменчивым значением lvalue (3.10), модификацией объекта, вызовом функции ввода-вывода библиотеки или вызовом функции, которая делает любую из этих операций, являются всеми побочными эффектами, которые являются изменениями состояния среда выполнения.

Является ли побочный эффект наблюдаемым поведением или нет? Как они связаны друг с другом?

4b9b3361

Ответ 1

Нет, побочный эффект не обязательно является наблюдаемым поведением. Например, изменение нелетучего объекта является побочным эффектом, но не наблюдаемым. Разница связана с тем, что побочные эффекты могут быть полностью перегруппированы или удалены компилятором, если наблюдаемое поведение остается неизменным.

int main()
{
    int a;
    a = 30;
    a += 2;
    return 0;
}

Большинство компиляторов, если потребуется, удаляют a полностью. Это разрешено. Назначения и сложение не наблюдаются.

Все наблюдаемое поведение обязательно должно быть побочным эффектом.