Могут ли соответствующие реализации удалять или переупорядочивать функции, которые не имеют наблюдаемого поведения, опреC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Могут ли соответствующие реализации удалять или переупорядочивать функции, которые не имеют наблюдаемого поведения, опре

Сообщение Anonymous »

intro.abstract p8 говорит:

Следующее определяет наблюдаемое поведение программы:
  • Доступ через изменчивые значения glvalues оценивается строго в соответствии с правилами абстрактной машины.
  • Данные доставляются в среду хоста для записи в файлы (см. также: ISO/IEC). 9899:2024, 7.23.3).
  • Динамика ввода и вывода интерактивных устройств должна происходить таким образом, чтобы вывод запроса фактически доставлялся до того, как программа ожидает ввода.
    То, что представляет собой интерактивное устройство, определяется реализацией.

Другими словами, поведение, не упомянутое в этом списке, не является Наблюдаемое поведение C++. Рассмотрим этот пример:

Код: Выделить всё

// "INT 3"
void call_asm_int_3(){
asm("INT $3");
}
int main(){
std::this_thread::sleep_for(std::chrono::minutes(10));
call_asm_int_3();
}
Спецификация сна_for — thread.thread.this p7:

Эффекты: блокирует вызывающий поток в течение относительного времени ожидания ([thread.req.timing]), указанного в rel_time.
Синхронизация: нет.

Фактического значения нет. наблюдаемое поведение, определенное в [intro.abstract] стр.8. Кроме того, функция call_asm_int_3 имеет эффект попадания в точку останова, внешний эффект которой может наблюдать человек; однако это также не является наблюдаемым поведением, определенным в C++.
Итак, интересно, могут ли соответствующие реализации удалить или переупорядочить эти функции?

Подробнее здесь: https://stackoverflow.com/questions/798 ... t-have-c-d
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»