Где формулировка или основы правила "как если бы" в стандарте C++?

После небольшого поиска в Google (например, site:eel.is "as if rule") Я не нашел подходящего места, где в стандарте C++ четко прописано так называемое правило "как если бы". Все, что я смог обнаружить, это то, что в тех местах стандарта, где он вызывается,intro.execution ссылка дана.

Но intro.execution не похоже, чтобы четко указать какую-либо общую форму этого правила. Я, вероятно, упускаю здесь что-то тонкое, но не могли бы вы указать мне место или места, где передается точное нормативное понимание правила? Может, весьintro.executionдействительно предназначен для передачи того, что мы называем правилом "как будто" в дикой природе? Признаюсь, я только что просмотрел это.

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

Определение правила "как если бы" можно найти, например, на сайте cppreference, как нечто о том, что компиляторам разрешено выполнять преобразования в программах при соблюдении некоторых ограничений, например, из соображений оптимизации.

2 ответа

Решение

Определение правила "как если бы" дается в сноске к 4.1.1/1. См. http://eel.is/c++draft/intro.abstract:

Это положение иногда называют правилом "как если бы", потому что реализация может игнорировать любое требование этого документа до тех пор, пока результат таков, как если бы требование было выполнено, насколько это можно определить по наблюдаемому поведению программа. Например, фактическая реализация не должна оценивать часть выражения, если она может сделать вывод, что ее значение не используется и что никаких побочных эффектов, влияющих на наблюдаемое поведение программы, не возникает.

Из другого проекта стандарта может показаться, что раздел, на который вы ссылаетесь в своей ссылке, на самом деле является правилом "как если бы" (см. Сноску № 5):

1.9 Выполнение программы [intro.execution]

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

PS: В этом цитируемом документе я нашел "интересным" запись в указателе для "правила как если бы":

program execution, 8–11
    abstract machine, 8
    as-if rule, see as-if rule
Другие вопросы по тегам