Следующее определяет наблюдаемое поведение программы:
- Доступ через изменчивые значения glvalues оценивается строго в соответствии с правилами абстрактной машины.
- Данные доставляются в хост-среду для записи в файлы (см. также: ISO/IEC). 9899:2024, 7.23.3).
- Динамика ввода и вывода интерактивных устройств должна происходить таким образом, чтобы вывод запроса фактически доставлялся до того, как программа ожидает ввода.
То, что представляет собой интерактивное устройство, определяется реализацией.
Это исчерпывающий список, что означает, что вещи, не указанные в списке не считаются наблюдаемым поведением.
Рассмотрим этот пример:
Код: Выделить всё
int main(){
auto t = network_request(); // #1
}
Чтение объекта, обозначенного изменчивым значением glvalue ([basic.lval]), изменение объекта, создание внедренного объявления ([expr.const]), вызов функции библиотечного ввода-вывода или вызов функции, которая выполняет любую из этих операций, являются побочными эффектами
Однако побочные эффекты не являются наблюдаемым поведением, поскольку их нет в списке. Итак, означает ли это, что соответствующая реализация может исключить вызов network_request по правилу «как если бы»? То есть вся программа является пустой, поскольку вызов функций ввода-вывода, не включающий вещи, перечисленные в [intro.abstract] p8, не является наблюдаемым поведением, соответствующая реализация не должна эмулировать структуру в соответствии с правилом «как если бы»:
Семантические описания в этом документе определяют параметризованную недетерминированную абстрактную машину. Этот документ не предъявляет никаких требований к структуре соответствующих реализаций. В частности, их не нужно копировать. или эмулировать структуру абстрактной машины. Скорее, соответствующие реализации необходимы для эмуляции (только) наблюдаемого поведения абстрактной машины, как описано ниже.
Подробнее здесь: https://stackoverflow.com/questions/798 ... e-behavior
Мобильная версия