Является ли вызов функций ввода-вывода наблюдаемым поведением?C++

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

Сообщение Anonymous »

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

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

Это исчерпывающий список, что означает, что вещи, не указанные в списке не считаются наблюдаемым поведением.
Рассмотрим этот пример:

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

int main(){
auto t = network_request(); // #1
}
Во-первых, вызов библиотеки ввода-вывода имеет побочные эффекты, как указано в [intro.execution] p7:

Чтение объекта, обозначенного изменчивым значением glvalue ([basic.lval]), изменение объекта, создание внедренного объявления ([expr.const]), вызов функции библиотечного ввода-вывода или вызов функции, которая выполняет любую из этих операций, являются побочными эффектами

Однако побочные эффекты не являются наблюдаемым поведением, поскольку их нет в списке. Итак, означает ли это, что соответствующая реализация может исключить вызов network_request по правилу «как если бы»? То есть вся программа является пустой, поскольку вызов функций ввода-вывода, не включающий вещи, перечисленные в [intro.abstract] p8, не является наблюдаемым поведением, соответствующая реализация не должна эмулировать структуру в соответствии с правилом «как если бы»:

Семантические описания в этом документе определяют параметризованную недетерминированную абстрактную машину. Этот документ не предъявляет никаких требований к структуре соответствующих реализаций. В частности, их не нужно копировать. или эмулировать структуру абстрактной машины. Скорее, соответствующие реализации необходимы для эмуляции (только) наблюдаемого поведения абстрактной машины, как описано ниже.


Подробнее здесь: https://stackoverflow.com/questions/798 ... e-behavior
Ответить

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

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

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

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

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